ickchen2

PKU 3273 二分搜

/*很好的一道二分题...二分时一定要判断上下两界的情况,不然有可能会超时~~还有退出之前要判断上下两界到底要哪个..这个最好用下界,不容易错!!*/
#include<stdio.h>
#include<iostream>
#include<string>
#include<vector>
#include<map>
#include<queue>
#include<algorithm>
#define M 1000000
using namespace std;
int a[M];
int n;
int find(int mid)
{
    int sum=0;
    int month=0;
    for(int i=0;i<n;i++)
        {
            if(sum+a[i]>mid)
            {
                month++;
                sum=a[i];
            }
            else
            {
                sum+=a[i];
            }
        }
        return month;
}
int main()
{
    freopen("3273.txt","r",stdin);
    int m;
    scanf("%d%d",&n,&m);
    int mi=-1,ma=0;
    for(int i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
        if(mi==-1||mi<a[i])
        {
            mi=a[i];
        }
        ma+=a[i];
    }
    int l=mi,h=ma;
    while(l<h)
    {
        int mid=(l+h)>>1;
        int sum=0;
        int month=0;
        month=find(mid);
        if(month+1<=m)
        {
            h=mid;
        }
        else
        {
            l=mid;
        }
        if(l+1==h)
        {
            int a=find(l);
            int b=find(h);
            if(a+1>m)l=h;break;
        }
    }
    printf("%d\n",l);
}

posted on 2008-09-10 20:16 神之子 阅读(438) 评论(0)  编辑 收藏 引用 所属分类: ACM题解


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

导航

统计

常用链接

留言簿(1)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜