codevs 3162 抄書問題

2021-07-30 12:58:22 字數 1236 閱讀 4925

3162 抄書問題

題目描述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 78 9

f[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#include

using

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

)}

codevs3162 抄書問題

題目描述 description 現在要把m本有順序的書分給k個人複製 抄寫 每乙個人的抄寫速度都一樣,一本書不允許給兩個 或以上 的人抄寫,分給每乙個人的書,必須是連續的,比如不能把第 一 第三 第四本數給同乙個人抄寫。現在請你設計一種方案,使得複製時間最短。複製時間為抄寫頁數最多的人用去的時間。...

codevs 3162 抄書問題

題目描述description 現在要把m本有順序的書分給k個人複製 抄寫 每乙個人的抄寫速度都一樣,一本書不允許給兩個 或以上 的人抄寫,分給每乙個人的書,必須是連續的,比如不能把第 一 第三 第四本數給同乙個人抄寫。現在請你設計一種方案,使得複製時間最短。複製時間為抄寫頁數最多的人用去的時間。輸...

二分 CodeVS3162 抄書問題

description 題目描述 現在要把m mm本有順序的書分給k kk個人複製 抄寫 每乙個人的抄寫速度都一樣,一本書不允許給兩個 或以上 的人抄寫,分給每乙個人的書,必須是連續的,比如不能把第 一 第三 第四本書給同乙個人抄寫。現在請你設計一種方案,使得複製時間最短。複製時間為抄寫頁數最多的人...