/*
* POJ_1505.cpp
*
* Created on: 2013年10月11日
* Author: Administrator
*/
#include <iostream>
#include <cstdio>
using namespace std;
const int maxn = 510;
int n,m,a[maxn];
long long sum ;
bool flag[maxn];
void init(){
scanf("%d%d",&n,&m);
sum = 0;
int i;
for(i = 1 ; i <= n ; ++i){
scanf("%d",&a[i]);
sum += a[i];
}
}
bool judge(long long lmt){
int i;
memset(flag,0,sizeof(flag));
int cnt = m;
long long now = 0;
for(i = n ; i > 0 ; --i){
if((now + a[i] > lmt) ||( i < cnt) ){
now = a[i];
flag[i] = true;
cnt--;
if(cnt == 0){
return false;
}
}else{
now += a[i];
}
}
return true;
}
void work(){
int l = 0 , r = sum , mid;
int i;
for(i = 1 ; i <= n ; ++i){
if(l < a[i]){
l = a[i];
}
}
while(l != r){
mid = (l + r)/2;
if(judge(mid)){
r = mid;
}else{
l = mid + 1;
}
}
judge(l);
for(i = 1 ; i <= n ; ++i){
printf(i < n ? "%d ":"%d",a[i],a[i]);
if(flag[i]){
printf("/ ");
}
}
printf("\n");
}
int main(){
int t;
scanf("%d",&t);
while(t--){
init();
work();
}
return 0;
}
(贪心5.3.2)POJ 1505 Copying Books()
最新推荐文章于 2019-08-18 19:43:00 发布