目錄有n根木棍, 第i根木棍的長度為li,n根木棍依次鏈結了一起, 總共有n-1個連線處. 現在允許你最多砍斷m個連線處, 砍完後n根木棍被分成了很多段,要求滿足總長度最大的一段長度最小, 並且輸出有多少種砍的方法使得總長度最大的一段長度最小. 並將結果mod 10007。。。
二分答案+動態規劃
#include #include #include #include const int mod = 10007;
const int n = 50005;
int l[n];
bool judge(int lim, int n, int m)
return used <= m;
}int s[n], p[n];
int f1[n], f2[n];
int get(int l, int n, int m)
res = (res + f[n]) % mod;
f[0] = 0;
for (int j = 1; j <= n; j += 1)
f[j] = (f[j - 1] + f[j]) % mod;
std:: swap(f, g);
}return (res + mod) % mod;
}int main ()
printf("%d ", l);
printf("%d\n", get(l, n, m));
return 0;
}
P2511 HAOI2008 木棍分割
傳送門 第乙個問題直接二分答案 然後第二個問題直接在二分出的答案下跑一遍 dp 設 f i j 表示當前已經切了 i 次考慮完前 j 個位置並且強制切 j,j 1 時的方案數 那麼有轉移 f i j sum f i 1 k 發現隨著 j 增加 l 不減,所以轉移可以用字首和並動態維護左端點優化到 o...
洛谷 P2511 HAOI2008 木棍分割
這題卡常,別用long long 這題第一問好搞,直接二分答案 第二問,凡是看到求方案數並於組合數一定沒有關係的一定用 dp 解決!然後定義狀態,顯然 轉移就是 然後我就不會優化了,看了題解,發現自己思維僵化竟然如此簡單 然後可以用字首和優化 要用滾動陣列 luogu judger enable o...
木棍分割 HAOI2008
有n根木棍,第i根木棍的長度為li,n根木棍依次鏈結了一起,總共有n 1個連線處.現在允許你最多砍斷m個連 接處,砍完後n根木棍被分成了很多段,要求滿足總長度最大的一段長度最小,並且輸出有多少種砍的方法使得總長 度最大的一段長度最小.並將結果mod 10007。輸入檔案第一行有2個數n,m.接下來n...