NYOJ(680),摘枇杷,(暴力,或者二分搜索)

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=680

很巧妙的一个题目,就是看你的逆向思维,result 一定是max(a[i])~sum中的一个数,然后遍历他,网上说可以二分,感觉完全没有必要,暴力也可,我都写了一下。

#include int 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


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部