肘子的博客

算法养成之路

搜索的应用——计算最优解 ALDS1_4_D:Allocation (二分搜索)

这道题使用二分搜索

#include<iostream>
#include<cstdio>

using namespace std;

const int maxn=1e5+5;

typedef long long LL;

int n,k,s[maxn];

int res(LL p)
{
	int i=0;
	for(int j=0;j<k;j++){
		LL temp=0;
		while(temp+s[i]<=p){
			temp+=s[i];
			i++;
			if(i==n){
				return n;
			}
		}
	}
	return i;
}

LL solve()
{
	LL left=0,right=100000*10000,mid;
	while(left<right){
		mid=left+((right-left)>>1);
		int v=res(mid);
		if(v>=n){
			right=mid;
		}else{
			left=mid+1;
		}
	}
	return right;
}

int main()
{
	scanf("%d%d",&n,&k);
	for(int i=0;i<n;i++){
		scanf("%d",&s[i]);
	}
	LL ans=solve();
	cout<<ans<<endl;
	return 0;
}
/*
5 3
8 
1 
7
3
9
*/

阅读更多
文章标签: binary search
个人分类: 查找算法
想对作者说点什么? 我来说一句

实验1:二分搜索算法

dingxiaobohrbeu dingxiaobohrbeu

2009-09-22 10:19:00

阅读数:1248

没有更多推荐了,返回首页

不良信息举报

搜索的应用——计算最优解 ALDS1_4_D:Allocation (二分搜索)

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭