現在要把m本有順序的書分給k個人複製(抄寫),每個人的抄寫速度都一樣,一本書不允許分給兩個或兩個以上的人抄寫,分給每個人的書,必須是連續的,比如不能把第
一、第三、第四本書給同乙個人抄寫。
現在請你設計一種方案,使得複製時間最短。複製時間為抄寫最多的人用去的時間。
第一行兩個整數,m,k(k<=m<=500)
第二行為m個整數,第i個數表示第i本書的頁數。
最短時間 抄寫時間最多的人中最短的人
input
9 31 2 3 4 5 6 7 8 9
output首先要求乙個字首和 f [ i ] 1]=當前的字首和
然後列舉人數 從 2 開始,因為 1 個人那不就是時間總和嗎,對不對
再列舉本數 從 i 開始,你好歹一人一本吧,沒那麼摳吧
最後尋找斷點,找出抄寫時間最長的那個人和 f [ j ] [ i ] 比小,小的存進 f 陣列
從 i – 1 開始,到 < j,f [ j ] [ i ] = 乙個很大很大的數
動態轉移方程:f [ j ] [ i ] = min ( max ( f [ k ] [ i-1 ] ,a [ j ] - a [ k ] ) , f[ j ] [ i ] ) ;
#include
#include
#include
using namespace std;
int n,m;
int a[550],b[550],f[550]
[550]
;int main(
)for
(int i=2;i<=m;i++) //列舉人數
for(int j=i;j<=n;j++) //列舉本數
cout<[m]
}
書的複製 normal DP
time limit 1000ms memory limit 65536k total submit 164 accepted 83 description 現在要把m mm本有順序的書分給k kk個人複製 抄寫 每個人的抄寫速度都一樣,一本書不允許分給兩個或兩個以上的人抄寫,分給每個人的書,必須是...
二解 書的複製
題目詳見 本題有兩種解法 一.動態規劃 類似於乘積最大那道題,關鍵是劃分好書的分配方式,因為書本抄寫是連續的,因此該問題是滿足無後效性的,我們可以以抄書的人數為階段,dp i j 表示前i個人抄寫j本書需要抄寫所消耗的最少時間.動態規劃轉移方程為 dp i j min dp i j max dp i...
書的複製(抄書問題)
現在要把 m 本有順序的書分給 k 給人複製 抄寫 每乙個人的抄寫速度都一樣,一本書不允許給兩個 或以上 的人抄寫,分給每乙個人的書,必須是連續的,比如不能把第 一 第三 第四本書給同乙個人抄寫。現在請你設計一種方案,使得複製時間最短。輸出共 k 行,每行兩個整數,第 i 行表示第 i 個人抄寫的書...