(因为天色见晚,所以暂时不编故事了(还要写作业),这里直接上代码与题解)
路由器不知大家做没做过一道贪心的题也是一道关于划分数列的问题。
恩,和这个差不多。
我们只需要二分答案,然后用这个方法做就ok了。
绝对能过的!
特判什么意思路由器也不多解释了。
至于特判中的等号究竟放哪里请参考我写的poj3579的题解。
ok题解搞定。
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<iostream>
using namespace std;
int a[100001];
int n,m;
void suan(int l,int r){
if(l>=r){
printf("%d",r);return;
}
int mid=(l+r)/2;
int sum=0,ans=0;
for(int i=1;i<=n;i++){
sum+=a[i];
if(sum>mid){
ans++;
sum=a[i];
}
}
ans++;
//printf("%d %d %d\n",ans,l,r);
if(ans>m)suan(mid+1,r);
else suan(l,mid);
}
int main(){
scanf("%d%d",&n,&m);
int sum=0,maxn=-1;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
sum+=a[i];
if(maxn<a[i])maxn=a[i];
}
//printf("%d %d ",maxn,sum);
suan(maxn,sum);
return 0;
}