//poj 1505
//sep9
#include <iostream>
using namespace std;
const int MAXN=512;
int sum[MAXN],path[MAXN],dp[MAXN][MAXN];
int main()
{
int cases;
scanf("%d",&cases);
while(cases--){
int m,k;
scanf("%d%d",&m,&k);
sum[0]=0;
int x;
for(int i=1;i<=m;++i){
scanf("%d",&x);
sum[i]=sum[i-1]+x;
}
memset(dp,-1,sizeof(dp));
dp[0][0]=0;
for(int i=1;i<=m;++i)
for(int j=1;j<=i&&j<=k;++j){
if(j==1) dp[i][j]=sum[i];
else{
for(int v=j-1;v<=i-1;++v){
int t=max(dp[v][j-1],sum[i]-sum[v]);
if(dp[i][j]==-1||t<dp[i][j])
dp[i][j]=t;
}
}
}
memset(path,-1,sizeof(path));
for(int i=m,j=k-1,x=0;i>=1;--i){
x+=sum[i]-sum[i-1];
if(x>dp[m][k]||i<=j){
path[j--]=i+1;
x=sum[i]-sum[i-1];
}
}
for(int i=1,j=1;i<=m;++i){
if(i>1) printf(" ");
if(j<k&&path[j]==i){
printf("/ ");
++j;
}
printf("%d",sum[i]-sum[i-1]);
}
puts("");
}
return 0;
}
poj 1505 Copying Books 动态规划
最新推荐文章于 2019-08-18 19:43:00 发布