zoukankan      html  css  js  c++  java
  • POJ3273 Monthly Expense (二分最小化花费)

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

    题意:FJ想把n天分成m组,每组是连续的,同一组的花费加起来算,求所分组情况中最高花费的最低值

    思路:二分答案。二分整数范围内的花费,每次去check一下,check的过程贪心处理即可。

    AC代码:

     1 #include<iostream>
     2 #include<stack>
     3 #include<vector>
     4 #include<algorithm>
     5 #include<cmath>
     6 using namespace std;
     7 int N,M;
     8 vector<int> day;
     9 bool check(int x){
    10     int cnt = 1;//cnt记录组数 
    11     int cost = 0;//cost记录一组的花费 
    12     for(int i = 0;i<day.size() ;i++){
    13         if(day[i]>x){
    14             return false;//如果某一天的花费大于x,直接返回false 
    15         }
    16         if(cost+day[i]>x){//如果花费超过x,那么就加一组 
    17             cnt++;
    18             cost = day[i];
    19             continue;
    20         }
    21         cost+=day[i];
    22     }
    23     return cnt<=M;
    24 }
    25 int main(){
    26     while(cin>>N>>M){
    27         day.clear() ;
    28         for(int i = 0;i<N;i++){
    29             int t;cin>>t;
    30             day.push_back(t); 
    31         }
    32         int l = 0,r = 1e9+10;
    33         int mid; 
    34         while(l<r){
    35             mid = (l+r)>>1;
    36             if(check(mid)){
    37                 r = mid ;
    38             }
    39             else{
    40                 l = mid + 1;
    41             }
    42         }
    43         cout<<l<<endl;
    44     }
    45     return 0;
    46 } 
  • 相关阅读:
    MultipartFile(文件的上传)
    JSONObject.fromObject--JSON与对象的转换
    Map集合与转化
    java读取excel文件
    Java中的Arrays类使用详解
    Arrays 类的 binarySearch() 数组查询方法详解
    JDK8 特性详解
    关于Java堆、栈和常量池的详解
    深入java final关键字
    杯酒人生
  • 原文地址:https://www.cnblogs.com/AaronChang/p/12169379.html
Copyright © 2011-2022 走看看