题解 P1281 【书的复制】
定义
其中
具体含义:将前
这样复制最后的复制时间即为
#include<bits/stdc++.h>
using namespace std;
int m,k,page[510],dp[510][510];
void printp(int x,int to) {
if(!to) return ;
int sum=0,t=1;
for(int i=to;i>=1;i--) {
sum+=page[i];
if(sum>x) {
sum-=page[i];
t+=i;
break;
}
}
printp(x,t-1);
cout<<t<<" "<<to<<endl;
}
int main() {
memset(dp,127,sizeof(dp));
cin>>m>>k;
dp[1][0]=0;
for(int i=1;i<=m;i++) {
cin>>page[i];
dp[1][i]=dp[1][i-1]+page[i];
}
for(int i=2;i<=k;i++) {
for(int j=1;j<=m;j++) {
for(int k=1;k<j;k++) {
dp[i][j]=min(dp[i][j],max(dp[i-1][k],dp[1][j]-dp[1][k]));
}
}
}
printp(dp[k][m],m);
return 0;
}