zoukankan      html  css  js  c++  java
  • POJ3273Monthly Expense(二分)

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

    题意: 农夫约翰给出了n天的每天花费 ,让你将这n天分成m组,每组中存在的天数必须是连续的,然后让每组里花费的总和尽量的小,最后将花费最大的那个费用输出 。

    思路 :分在数学计算方法里的这4个题好像都是二分吧,这个题也是用的二分。

    #include<cstdio>
    #include<iostream>
    using namespace std ;
    int a[110000] ;
    int main()
    {
        int n ,m;
        while(scanf("%d %d",&n,&m)!=EOF)
        {
            int low = 0,high = 0 ,sum = 0;
            for(int i = 1 ; i <= n ; i++)
            {
                scanf("%d",&a[i]) ;
                low = max(low,a[i]) ;//让这些钱数中的最大值做为下界,这样的话,所求的值必然在最大值和总和之间
                high += a[i] ;
            }
            int mid ;
            while(low <= high)
            {
                mid =  (low+high)/2 ;
                sum = 0 ;
                int cnt = 0 ;
                for(int i = 1 ; i <= n ; i++)
                {
                    sum += a[i] ;
                    if(sum > mid)//如果前几天的钱的总数大于mid,则把前i-1天作为一组,而且分组数加1.
                    {
                        cnt++ ;
                        sum = a[i] ;
                    }
                }
                if(sum != 0)//最后一个分组
                    cnt++ ;
                if(cnt > m)//如果分组比m多说明,分的钱数太少了,需要增加下界
                    low = mid+1 ;
                else high = mid-1 ;
            }
            printf("%d
    ",mid) ;
        }
        return 0 ;
    }
    View Code
  • 相关阅读:
    vue中minxin---小记
    微信认证
    Fatal error Using $this when not in object context in
    $.ajax()方法详解
    $.post
    jquery中的each
    jquery的$.extend和$.fn.extend作用及区别
    javascript字符串函数
    serializeArray()与serialize()的区别
    一个登陆界面
  • 原文地址:https://www.cnblogs.com/luyingfeng/p/3408909.html
Copyright © 2011-2022 走看看