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