随笔 - 177  文章 - 1 评论 - 23 阅读 - 32万

    简单二分,下限为每天花费的最大值,上限是所有天数花费的总和.

 

复制代码
#include<iostream>
#include<cstdio>
using namespace std ;
int mon[100005] ;
int i, j, n, m ;
int jud(int mid){
    int s=0, count=1 ;
     for (i=0; i<n; i++){
        s += mon[i] ;
        if(s>mid){
            s = mon[i] ;
            count ++ ;
        }
    }
    if(count>m) return true ;
    else    return false ;
}
int main(){
    int ans ;
    int max, sum ;
    while(scanf("%d%d", &n, &m)!=EOF){
        max = -1 ;
        sum = 0 ;
        for(i=0; i<n; i++){
            scanf("%d", &mon[i]) ;
            if(mon[i]>max)   max = mon[i] ;
            sum += mon[i] ;
        }
        int l = max, r = sum, mid ;
        while(r>l){
            mid = (l+r) / 2 ;
            if(jud(mid))
                l = mid + 1 ;
            else
                r = mid - 1 ;
        }
        cout << l << endl ;
    }
复制代码

} 

posted on   追逐.  阅读(254)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示