ACMCLUB 板


LINE

※ 引述《ledia (contemplation)》之銘言: : ※ 引述《kc655039 (￾NN￾N ￾  )》之銘言: : 的確不是很容易看 ^^; : 在還沒看完你的程式碼之前 : 說實在我也不太知道該怎麼幫你的程式加速 : 不過我自己寫這題的經驗上看來 : 或許你是多做了太多重覆的事情 : 因為我的程式用了 1.820 秒(雖然也不少了), 而這題限 10 秒 過了也差不多有半年了,最近又開始寫這題,想說也過了半年了....之類的, 跟上回用的方法一樣,可是發現遞迴似乎可以用一下,所以就用了,想說搞不 好會有令人高興的結果,一開始還是TLE,TLE了滿多次不管我怎麼改都一樣, 後來發現....是因為下面紅色字的地方本來是零,Backtracking(...)的參數 本來也沒有k,改成現在這樣以後就很快的AC了(0:00:340),然後其實之前就 想說如果第一個或是其中有一個沒辦法構成邊其實就是no了,所以就一開始 就放存放邊的array的第一個元素進去,這樣就可以減少遞迴樹的size, 改了這樣以後就變成0:00:076,後來又想,如果由小到大排列,這樣的話, 如果加上某邊然後就大於邊長,那後面的邊都可以不用試了,也可以減少遞迴 的次數,所以我就上了,可是還是0:00:076....是因為排列把時間拖回來了嗎?? 還是排列的時機不對之類的,所以目前就這樣了...我似乎想不出加速的方法了, 不過真的令我滿驚訝的,想不到把紅字的地方做那樣的改變會差那麼多..... 還是有點搞不懂...是哪種側資會差到從TLE到000340..... 對了請你把你的code寄給我好嗎 [email protected] 我想多看看, 下面是code應該比以前那個好看滿多百倍的了吧.是沒有排序的. 不過好像還是滿難看的所以加了些註解,遞迴樹的size好像決定了速度?? 還有就是我有用到一個全域變數judge那個可以不用嗎,因為有時候用遞迴, 都會用全域變數,我在想說有沒辦法完全不要用這樣. #include <iostream> using std::cout; using std::cin; using std::endl; int judge; void Backtracking(int k,const int length,int n,int data[][20],int total,int accumulator) { int i; if (accumulator>length) return; if (total==3) { judge=1; return; } if (accumulator==length) { for (i=0;i<n;i++)//這個主要是放下一個邊的第一個元素 if (data[1][i]) { data[1][i]--; Backtracking(i,length,n,data,total+1,data[0][i]); data[1][i]++; break; } return; } for (i=k;i<n;i++) { if (data[1][i]) { data[1][i]--; Backtracking(i,length,n,data,total,accumulator+data[0][i]); if (judge) break; data[1][i]++; } } } main() { int N; int n; int data[2][20];//存放資料的地方上層是存邊長,下層存有幾個這個長度 //的資料 int length; //邊長 int i,j,temp,counter,yes; cin>>N; while (N) { length=0; judge=0; counter=0; yes=0; cin>>n; for (i=0;i<n;i++)//這個迴圈主要用來輸入資料,順便整理 { cin>>temp,length+=temp; for (j=0;j<counter;j++) if (temp==data[0][j]) { data[1][j]++; break; } if (j==counter) data[0][counter]=temp,data[1][counter++]=1; }//counter是資料的數量 if (length%4==0) { length/=4;//算一下一個邊多長這樣 for (i=0;i<counter;i++)//看看有沒有輸入的資料大於邊長 if (data[0][i]>length) { yes=1; break; } if (!yes) { data[1][0]--; Backtracking(0,length,counter,data,0,data[0][0]); } } if (judge) cout<<"yes"<<endl; else cout<<"no"<<endl; N--; } return 0; } --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.161.12.54 ※ 編輯: kc655039 來自: 218.161.12.54 (02/19 21:05)







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BabyMother站內搜尋

TOP