I - Washing clothes
生活随笔
收集整理的這篇文章主要介紹了
I - Washing clothes
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意:
有n個人會在某時間段來洗衣服,但是只有一臺洗衣機,當洗衣機被用時其他人只能手洗,手洗時間為y(題目給定),洗衣機的時間為x,x∈[1,y],問當x分別為[1,y]時,最短的洗衣時間是多少?
題解:
據我所知有兩個方法:
1.李超樹 2.貪心
李超樹我還不是很清楚,等學會了再更新。。
貪心的話其實就是想辦法優化,以為按照原題數據肯定是不可能暴力的,
根據題意:y肯定大于x
那我們就像最省時間的方法就是在y的時間內來洗衣機,因為一個人一旦手洗就不能再機洗,我們就看手洗時間等于多好啊機洗時間
記錄最大數為pos,也就是從pos到最后一個人,這期間是小于一次手洗時間,也就是都可以手洗
然后i從n到pos枚舉,記錄機洗所花時間的最大值,并于第pos個人手洗時間進行對比
也就是從第pos人開始,是手洗時間更長還是機洗時間更長
代碼:
#include<bits/stdc++.h> using namespace std; const int maxn=1e6+9; typedef long long ll; ll t[maxn];int main() {ios::sync_with_stdio(false);ll n,y;while(cin>>n>>y){ll sum=0;for(int i=1;i<=n;i++){cin>>t[i];}sort(t+1,t+1+n);for(ll x=1;x<=y;x++)//洗衣機 {ll pos=0;for(ll j=n-1;j>=1;j--)//從后向前找人 {int times=(n-j+1); if(y>1ll*x*times)continue;//當前人洗的時間等于多少洗衣機時間 else //當超過人洗時間,記錄此時j {pos=j;break;}}for(ll i=n;i>pos;i--){sum=max(sum,1ll*(t[i]+x*(n-i+1)));//不同時間段人用洗衣機所花時間 }if(pos)sum=max(sum,1ll*(t[pos]+y));if(x!=y)cout<<sum<<" ";else cout<<sum<<endl;}}} 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的I - Washing clothes的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 莫比乌斯反演+例题
- 下一篇: 人工智能——图像分析第二期练习