description 題目描述
現在要把minput 輸入mm本有順序的書分給k
kk個人複製(抄寫),每乙個人的抄寫速度都一樣,一本書不允許給兩個(或以上)的人抄寫,分給每乙個人的書,必須是連續的,比如不能把第
一、第三、第四本書給同乙個人抄寫。現在請你設計一種方案,使得複製時間最短。複製時間為抄寫頁數最多的人用去的時間。
第一行兩個整數m、koutput 輸出m、km、
k;(0≤k
≤m
≤500
)(0≤k≤m≤500)
(0≤k≤m
≤500
)第二行m
mm個整數,第i
ii個整數表示第i
ii本書的頁數。
共ksample input 樣例輸入kk行,每行兩個正整數,第i
ii行表示第i
ii個人抄寫的書的起始編號和終止編號。k
kk行的起始編號應該從小到大排列,如果有多解,則盡可能讓前面的人少抄寫。
9 3sample output 樣例輸出1 2 3 4 5 6 7 8 9
1 5limits 限制6 78 9
詳見試題第一次見到這題是考試的時候time limit : 1s1s
1s& memory limit : 128mb
128mb
128m
b
不會啊!!!
什麼都沒輸出,得了10分(rp就這麼用光了…)
首先可以dp做
d p[
i][j
]dp[i][j]
dp[i][
j]表示前i
ii頁書被j
jj個人抄,抄寫最多的頁數
d p[
i][j
]dp[i][j]
dp[i][
j]=m in
(max
(dp[
k][i
−1],
sum[
k+1,
i]))
min(max(dp[k][i-1],sum[k+1,i]))
min(ma
x(dp
[k][
i−1]
,sum
[k+1
,i])
)輸出貪心思路搞定
上**
#include
#include
#define maxn 1100
using
namespace std;
int dp[maxn]
[maxn]
;int ans[maxn][2
];int n,k,m,i,j;
int p,q,cnt;
int a[maxn]
;int sum[maxn]
;int
mymax
(int a,
int b)
intmain()
for(m=
2;m<=k;m++
)for
(i=1
;i<=n;i++
)for
(j=1
;jp=n,q=k;
for(i=n;i>=
1;i--)}
ans[1]
[0]=
1;ans[1]
[1]=p;
for(
int i=
1;i<=k;i++)if
(ans[i][0
]&&ans[i][1
])printf
("%d %d\n"
,ans[i][0
],ans[i][1
]);return0;
}
但是有點卡時……
正解是二分答案,類似 noip 2015 跳石頭的思路。
code
引用學長一句話:
男人,要直面自己的弱點…
codevs 3162 抄書問題
3162 抄書問題 題目描述description 現在要把m本有順序的書分給k個人複製 抄寫 每乙個人的抄寫速度都一樣,一本書不允許給兩個 或以上 的人抄寫,分給每乙個人的書,必須是連續的,比如不能把第 一 第三 第四本數給同乙個人抄寫。現在請你設計一種方案,使得複製時間最短。複製時間為抄寫頁數最...
codevs3162 抄書問題
題目描述 description 現在要把m本有順序的書分給k個人複製 抄寫 每乙個人的抄寫速度都一樣,一本書不允許給兩個 或以上 的人抄寫,分給每乙個人的書,必須是連續的,比如不能把第 一 第三 第四本數給同乙個人抄寫。現在請你設計一種方案,使得複製時間最短。複製時間為抄寫頁數最多的人用去的時間。...
codevs 3162 抄書問題
題目描述description 現在要把m本有順序的書分給k個人複製 抄寫 每乙個人的抄寫速度都一樣,一本書不允許給兩個 或以上 的人抄寫,分給每乙個人的書,必須是連續的,比如不能把第 一 第三 第四本數給同乙個人抄寫。現在請你設計一種方案,使得複製時間最短。複製時間為抄寫頁數最多的人用去的時間。輸...