題目描述description
現在要把m本有順序的書分給k個人複製(抄寫),每乙個人的抄寫速度都一樣,一本書不允許給兩個(或以上)的人抄寫,分給每乙個人的書,必須是連續的,比如不能把第
一、第三、第四本數給同乙個人抄寫。現在請你設計一種方案,使得複製時間最短。複製時間為抄寫頁數最多的人用去的時間。
輸入描述input description
第一行兩個整數m、k;(k<=m<=100)
第二行m個整數,第i個整數表示第i本書的頁數。
輸出描述output description
共k行,每行兩個正整數,第i行表示第i個人抄寫的書的起始編號和終止編號。k行的起始編號應該從小到大排列,如果有多解,則盡可能讓前面的人少抄寫。
樣例輸入sample input
9 31 2 3 4 5 6 7 8 9
樣例輸出sample output
1 56 7
8 9f[i][j] 表示抄到第j本書,用了i個人的時候,抄的最多的人最少抄多少
f[i][j]=min(max( f[k-1][j-1],sum[i]-sum[k])) sum是維護的字首和
求出f[n][k-1]即n本書 分給k個人抄,抄的最多的人 最少抄多少,
題目要求靠前的人盡可能抄的少
那麼 從後往前掃一遍,從後往前 分成乙個個區間,每個區間不超過f[n][k-1]就行
#include#includeusing
namespace
std;
int n,m,a[110],sum[110],dp[110][110
],cnt;
struct
nodes[
110];
intmain()
for(int i=1;i<=n;i++)}}
int ans=dp[n][m];
int sum=0,c=n;
for(int i=n;i>=1;i--)
}if(cnt!=0
) }
if(cnt==0
)}
codevs 3162 抄書問題
3162 抄書問題 題目描述description 現在要把m本有順序的書分給k個人複製 抄寫 每乙個人的抄寫速度都一樣,一本書不允許給兩個 或以上 的人抄寫,分給每乙個人的書,必須是連續的,比如不能把第 一 第三 第四本數給同乙個人抄寫。現在請你設計一種方案,使得複製時間最短。複製時間為抄寫頁數最...
codevs3162 抄書問題
題目描述 description 現在要把m本有順序的書分給k個人複製 抄寫 每乙個人的抄寫速度都一樣,一本書不允許給兩個 或以上 的人抄寫,分給每乙個人的書,必須是連續的,比如不能把第 一 第三 第四本數給同乙個人抄寫。現在請你設計一種方案,使得複製時間最短。複製時間為抄寫頁數最多的人用去的時間。...
二分 CodeVS3162 抄書問題
description 題目描述 現在要把m mm本有順序的書分給k kk個人複製 抄寫 每乙個人的抄寫速度都一樣,一本書不允許給兩個 或以上 的人抄寫,分給每乙個人的書,必須是連續的,比如不能把第 一 第三 第四本書給同乙個人抄寫。現在請你設計一種方案,使得複製時間最短。複製時間為抄寫頁數最多的人...