NYOJ(680),摘枇杷,(暴力,或者二分搜索)
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=680
很巧妙的一个题目,就是看你的逆向思维,result 一定是max(a[i])~sum中的一个数,然后遍历他,网上说可以二分,感觉完全没有必要,暴力也可,我都写了一下。
#includeint a[1010]; int n,m;bool judge(int x) ///最多搬x,看是否能在m组以内搬完 {int s=0,cnt=1;for(int i=0;i ){if(s+a[i]>x){cnt++;s = a[i];if(cnt>m)return false ;}else s += a[i];}return true; }int Bin_Search(int _max,int sum) {int l=_max,r=sum;while(l<=r){int mid = (l+r)/2;if(judge(mid))r = mid-1;else l=mid + 1;}return l; }int main() {while(scanf("%d%d",&n,&m)!=EOF){for(int i=0;i )scanf("%d",&a[i]);int _max = -1,sum = 0;for(int i=0;i ){if(a[i]>_max)_max = a[i];sum+=a[i];}/*int i;for(i=_max;i<=sum;i++){if(judge(i))break;}*/printf("%d\n",Bin_Search(_max,sum));}return 0; }
转载于:https://www.cnblogs.com/TreeDream/p/5715693.html
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
