#include<stdio.h>
#include<string.h>
int camp[2000];
int rt[500];
int n,k;
int count;
bool C(int x)
{
memset(rt,0,sizeof(rt));
int sum=0;
count=0;
for(int i=0;i<n;i++)
{
if(camp[i]>x)//this is important
return false;
sum+=camp[i];
if(sum>x)
{
sum=camp[i];
count++;
}
}
count++;
if(count<=k)
return true;
return false;
}
int main()
{
int cas;
scanf("%d",&cas);
int result[1000];
for(int T=1;T<=cas;T++)
{
scanf("%d%d",&n,&k);
n++;
k++;
for(int i=0;i<n;i++)
scanf("%d",&camp[i]);
int lb=0,ub=10008888;
int ans;
while(ub-lb>1)
{
int mid=(ub+lb)>>1;
if(C(mid))
{
ub=mid;
ans=count;
}
else
lb=mid;
}
printf("Case %d: %d\n",T,ub);
int j=0;
for(int i=0;i<k;i++)//I WA 7 times at here because I didn't see question carefully
{
int sum=0;
while(j<n)
{
if(n-1-j>=k-1-i&&sum+camp[j]<=ub)
{
sum+=camp[j];
}
else
{
printf("%d\n",sum);
break;
}
if(j==n-1)
{
printf("%d\n",sum);
}
j++;
}
}
}
return 0;
}
LIGHTOJ 1056
最新推荐文章于 2017-08-11 19:54:11 发布