poj3273 二分搜索

鏈接:http://poj.org/problem?id=3273

水題,不過第一次二分。

題解:http://zhenzxie.iteye.com/blog/1446986

 

 

#include<stdio.h>
#include<string.h>
int day[100040];
int main()
{
	int i,j,n,m,sum,max,mid,res;
	while(scanf("%d%d",&n,&m)>0)
	{
		sum=0;
		max=-1000;
		for(i=1;i<=n;i++)
		{
			scanf("%d",&day[i]);
			sum+=day[i];
			max=(max>day[i])?max:day[i];
		}
		while(max<sum)
		{
			mid=(max+sum)/2;
			for(i=2,j=day[1],res=1;i<=n;i++)
				if((j=j+day[i])>mid)
				{
					res++;
					j=day[i];
				}
			if(res<m)
				sum=mid-1;
			if(res==m)
				sum=mid;
			if(res>m)
				max=mid+1;
		}
		printf("%d\n",max);

	}
	return 0;
}


發佈了12 篇原創文章 · 獲贊 1 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章