zoukankan      html  css  js  c++  java
  • poj 3104 晾衣服问题 最大化最小值

    题意:n件衣服各含有ai水分,自然干一分钟一个单位,放烘干机一分钟k个单位,问:最短时间?

    思路:

    1. mid为最短时间
    2. 如果 a[i]-mid>0说明需要放入烘干机去烘干 烘干的时间为x  那么满足  kx+(mid-x)>=a[i]  可以推出  x=(a[i]-mid)/(k-1),记住要向上取余
    3. 把所有需要烘干机烘干的时间都加起来 ans. 如果ans>mid 说明mid太小 增加下限  反之减少上限
    4. 刚开始下限为 1,上限为 max  
    5. 如果k==1 则结果为 max

    解决问题的代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include <algorithm>
    using namespace std;
    int n, k;
    int x[100001];
    bool solve(int mid)
    {
            int ant = 0;
            for (int i = 0; i < n; i++)
            {
                   int more = x[i] - mid;
                   if (more > 0)
                   {
                           ant += (more + k - 1) / k;
                           if (ant > mid)
                                  return true;
                   }
            }
            return false;
    }
    int main()
    {
            scanf("%d", &n);
            for (int i = 0; i < n; i++)
                   scanf("%d", &x[i]);
            scanf("%d", &k);
            k--;
            if (k == 0)
            {
                   printf("%d
    ",*max_element(x, x + n));
                   return 0;
            }
            int lb = *min_element(x, x + n) / k;
            int ub = *max_element(x, x + n);
            while (ub - lb > 1)
            {
                   int mid = (ub + lb) / 2;
                   if (solve(mid)) lb = mid;
                   else ub = mid;
            }
            printf("%d
    ", ub);
            return 0;
    }
    君子知命不惧,自当日日自新
  • 相关阅读:
    29.内置方法中之描述符
    28. 面向对象进阶之内置方法上
    Sort Colors*
    Implement Trie (Prefix Tree)
    Course Schedule
    Permutations
    Reverse Linked List
    Decode Ways
    Subsets *
    Longest Consecutive Sequence *
  • 原文地址:https://www.cnblogs.com/xuxiaojin/p/9414782.html
Copyright © 2011-2022 走看看