首页 > 其他 > 详细

poj 3273

时间:2014-10-30 20:51:53      阅读:180      评论:0      收藏:0      [点我收藏+]
/*
  题意:给定n,m,然后n个数字,要求一个最小的lim
  使得这连续n个数字可以被分为连续的m个集合,每个集合的和都不大于Lim
/*
#include <iostream> #include <cstdio> #define range(i,a,b) for (int i=a;i<=b;i++) using namespace std; const int maxn =100000; int Cost[maxn+1]; int L,R; int n,m; bool check(int val) { int sum(0); int ans(0); range(i,1,n) if (Cost[i]>val) return 0; else if (sum+Cost[i]<=val) { sum+=Cost[i]; } else { sum=Cost[i]; ans++; } if (sum!=0) ans++; return ans<=m; } int main() { cin>>n>>m; L = R = 0; range(i,1,n) { scanf("%d",&Cost[i]); R+=Cost[i]; } range(c,1,100) { int M = (L+R)>>1; if (check(M)) R=M; else L=M; } if (check(L)) cout<<L<<endl; else cout<<R<<endl; return 0; }

 

poj 3273

原文:http://www.cnblogs.com/dandi/p/4063554.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!