P1281 書的複製

2022-08-12 21:54:09 字數 876 閱讀 9073

先說下題意吧,題面給的題意我都看不懂:

有\(n\)本書,每本書有乙個頁數%a_i%。每個人能寫連續的幾本書,他們寫書的速度可以認為是1頁1天。求讓\(k\)個人抄完這\(n\)本書的最短時間。

ps:\(k\)個人抄書的時間是其中抄的最慢的人用的時間。

dp的狀態非常容易想:dp[i][j]表示前\(i\)本書,用\(j\)個人抄的最短時間。

那麼顯然可以列舉乙個小於\(i\)的\(j\)來更新狀態,這個方程式很水就不講了。

重點在於輸出方案。

得到的最短時間,根據題意,我們要讓後面的人盡可能的抄更多的書。

做法很簡單,從後面開始遞迴,列舉出最大的一段滿足的區間供給那個人抄,然後剩下的區間就給剩下的人抄。

**:

#include#include#includeconst int maxn = 505;

int dp[maxn][maxn];

int a[maxn], b[maxn];

int n, m;

void print(int maxv, int pos)

i++;

print(maxv, i - 1);

printf("%d %d\n", i, pos);

}int main()

for(int i = 1; i <= n; i++) dp[i][1] = b[i];

/*for(int k = 2; k <= m; k++)}}

*/for(int i = 2; i <= n; i++)}}

//printf("%d\n", dp[n][m]);

print(dp[n][m], n);

return 0;

}

P1281 書的複製 DP

原題鏈結 和之前的統計單詞個數十分類似 將前面的分為兩部分 一部分是前面的人抄的 剩下的是自己抄的 取max 和原時間取min include include include include include include include include include include includ...

P1281 書的複製 dp

紀念一下,這是我自己第乙個自己想出轉移方程的dp題!先定義一下陣列,f i j 表示第i個人,抄了j本書花的最短時間。w i j 表示 i,j 閉區間內,從第i本書抄到第j本書用的時間 轉移方程 f h i min f h i max f h 1 j w j 1 i 1 i m,1 j i 1 求出...

洛谷P1281 書的複製

大多數人的錯誤原因 盡可能讓前面的人少抄寫,如果前幾個人可以不寫則不寫,對應的人輸出0 0。不過,已經修改資料,保證每個人都有活可幹。現在要把m本有順序的書分給k給人複製 抄寫 每乙個人的抄寫速度都一樣,一本書不允許給兩個 或以上 的人抄寫,分給每乙個人的書,必須是連續的,比如不能把第 一 第三 第...