当前位置: 代码迷 >> 综合 >> POJ3104(Drying,最小化,可行解)
  详细解决方案

POJ3104(Drying,最小化,可行解)

热度:87   发布时间:2024-01-22 02:04:42.0

题意:

蒸衣服,单位时间掉K单位的水。不蒸单位时间掉1单位的水。给定n件衣服的水量和K,求K的最小值。

 

题解:

最小化可行解。

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>using namespace std;int a[100000+5];int n,k;bool C(int x)
{long long sum=0;for(int i=0; i<n; i++)if(a[i]>x){sum+=ceil(double(a[i]-x)/(k-1));//需要蒸的时间if(sum>x)return false;}return sum<=x;//x为可行解。即 x 时间所有衣服都干了!
}int main()
{while(cin>>n){int INF=0;for(int i=0; i<n; i++){scanf("%d",&a[i]);if(a[i]>INF)INF=a[i];}cin>>k;if(k==1){cout<<INF<<endl;return 0;}//蒸和不蒸效率一样int lb=0;int ub=INF+10;while(ub-lb>1){int mid=(ub+lb)/2;if(C(mid))ub=mid;//最小化可行解else lb=mid;}cout<<ub<<endl;}
}