標籤:+= 長度 應該 佔用 else 問題 隨機數 code max
10.6考試總結P1063 能量項鏈
其實是一道區間DP題.......應該並不難。就是DP做少了? 莫名不會。實際上仔細想一想就明白了。直接枚舉分段點進行計算就可以了。
for(int l = 1, r = x; r < n2; ++l, ++r) { for(int k = l; k < r; ++k) { f[l][r] = max_(f[l][r], f[l][k] + f[k + 1][r] + num[l] * num[r + 1] * num[k + 1]); } if(x == n) ans = max_(ans, f[l][r]); }
P1092 蟲食算
這蟲子怕是廣東來的
大法師完美解決。但必須要有剪枝。不然肯定會超。
1.根據豎式確定先出現的字母先枚舉情況。
2.根據兩個加數直接確定和上的數字。最後判斷是否可行。
只要有這兩個就沒有問題了。
IL bool prune (int t){//已知a,b,c 三字母都已填數 那麼 判斷(a+b)%n=c (a+b+1)%n=c都不成立 已知a,b,c三者其中2個求得第3個已經被佔用 for (int i=n-1; i>=0; --i) { if (x[a[i]] != -1 && x[b[i]] != -1 && x[c[i]] != -1) { if ((x[a[i]] + x[b[i]]) % n != x[c[i]] && (x[a[i]] + x[b[i]] + 1) % n != x[c[i]]) return 1; else { if(x[a[i]] != -1 && x[b[i]] != -1 && x[c[i]] == -1) if (y[(x[a[i]]+x[b[i]])%n] && y[(x[a[i]]+x[b[i]]+1)%n]) return 1; if (x[a[i]] != -1 && x[b[i]] == -1 && x[c[i]] != -1) if (y[(x[c[i]]-x[a[i]]+n)%n] && y[(x[c[i]]-x[a[i]]+1+n)%n])//b1=(c-a+n)%n b2=(c-a-1+n)%n return 1; if (x[a[i]] == -1 && x[b[i]] != -1 && x[c[i]] != -1) if (y[(x[c[i]]-x[b[i]]+n)%n] && y[(x[c[i]]-x[b[i]]+n-1)%n])//a1=(c-b+n)%n a2=(c-b-1+n)%n return 1; } } } return 0;}
P1052 過河
過河最致命的就是長度\(10^9\)然後又是一個明顯的DP題目。怎麼都會爆........所以肯定要想辦法縮短路程
不知道為什麼就取了1-10的最小公倍數來壓縮了。
壓縮了之後就會非常友好
for (int i=1;i<=l+t;i++) for (int j=s;j<=t;j++) { if (i-j>=0) f[i]=min(f[i],f[i-j]); f[i]+=stone[i]; }
P1053 篝火晚會
覺得難就跳過了。實際理解一下題目......考試的時候看不懂事後諸葛亮........但是現在至少會做了
就是找最大值......
然後?然後沒了
P054等價運算式
考試的時候思考了一下。隨機值帶入驗證。
因為輸入資料少,多驗證一下就很可以了。
奈何不會隨機數
其實這麼做就不難了
#10.6考試總結