原文链接:https://www.luogu.com.cn/problem/P1281
AC代码:
#include<iostream>
#include<string.h>
#include<vector>
#include<algorithm>
using namespace std;
int n,m;
int lef=0,rig=0,mid;
int mapp[505][2];
vector<int> vec;
int judge(){
int i,j,tim=0,total=0;
for(i=0;i<vec.size();i++){
if(total+vec[i]<=mid){
total+=vec[i];
}
else{
total=vec[i];tim++;
}
}
//cout<<tim<<" "<<m<<endl;
return tim>=m;
}
int main(){
int i,j,k;
cin>>n>>m;
for(i=0;i<n;i++){
cin>>j;
vec.push_back(j);
lef=lef>j?lef:j;
rig+=j;
}
while(lef<=rig){
mid=(lef+rig)/2;//cout<<lef<<" "<<mid<<" "<<rig<<endl;
int k=judge();
if(k) lef=mid+1;
else rig=mid-1;
}
memset(mapp,0,sizeof(mapp));
j=vec.size()-1;
int total=0;
k=m;
while(1){
mapp[k][1]=j+1;
total=0;
for(;j>=0;j--){
if(total+vec[j]<=lef){
total+=vec[j];
}
else{
mapp[k][0]=j+2;
break;
}
if(j==0) mapp[k][0]=1;
}
k--;
if(k==0) break;
}
for(i=1;i<=m;i++){
cout<<mapp[i][0]<<" "<<mapp[i][1]<<endl;
}
return 0;
}