本文主要是介绍poj 3273 Monthly Expense 二分查找,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
只想说一句:二分查找的时候注意:要确定上下界,而我是l=0,r=INF 二分的,wa了许多次
#include<stdio.h>
#define INF 0x3f3f3f3f
int N,M,d[100000+16];
int judge(int x)
{
int ans=0,cnt=1,i;
for(i=0;i<N;i++)
{
ans+=d[i];
if(ans>x)
{
cnt++;
ans=d[i];
}
}
if(cnt>M)
return 0;
else
return 1;
}
int main()
{
int i,l=0,r=0,m;
scanf("%d%d",&N,&M);
for(i=0;i<N;i++)
{
scanf("%d",&d[i]);
r+=d[i];
if(d[i]>l)
l=d[i];
}
while(l<r)
{
m=(l+r)/2;
if(judge(m))
r=m;
else
l=m+1;
}
printf("%d\n",l);
}
这篇关于poj 3273 Monthly Expense 二分查找的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!