當(dāng)前位置:
首頁 >
luogu2577/bzoj1899 午餐 (贪心+dp)
發(fā)布時(shí)間:2023/12/18
32
豆豆
生活随笔
收集整理的這篇文章主要介紹了
luogu2577/bzoj1899 午餐 (贪心+dp)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
首先,應(yīng)該盡量讓吃飯慢的排在前面,先按這個(gè)排個(gè)序
然后再來決定每個(gè)人到底去哪邊
設(shè)f[i][j]是做到了第i個(gè)人,然后1號(hào)窗口目前的總排隊(duì)時(shí)間是j,目前的最大總時(shí)間
有這個(gè)i和j的話,再預(yù)處理出前i個(gè)人的排隊(duì)總時(shí)間sum[i],可以知道在2號(hào)窗口的排隊(duì)時(shí)間是sum[i]-j
拿著兩個(gè)去更新答案就行了
1 #include<bits/stdc++.h> 2 #define pa pair<int,int> 3 #define CLR(a,x) memset(a,x,sizeof(a)) 4 using namespace std; 5 typedef long long ll; 6 const int maxn=210; 7 8 inline ll rd(){ 9 ll x=0;char c=getchar();int neg=1; 10 while(c<'0'||c>'9'){if(c=='-') neg=-1;c=getchar();} 11 while(c>='0'&&c<='9') x=x*10+c-'0',c=getchar(); 12 return x*neg; 13 } 14 15 int f[maxn][maxn*maxn],st[maxn]; 16 int N; 17 struct Node{ 18 int e,q; 19 }p[maxn]; 20 21 inline bool cmp(Node a,Node b){return a.e>b.e;} 22 23 int main(){ 24 //freopen("","r",stdin); 25 int i,j,k; 26 N=rd(); 27 for(i=1;i<=N;i++){ 28 p[i].q=rd(),p[i].e=rd(); 29 }sort(p+1,p+N+1,cmp); 30 for(i=1;i<=N;i++) 31 st[i]=st[i-1]+p[i].q; 32 33 CLR(f,127);f[0][0]=0; 34 for(i=1;i<=N;i++){ 35 for(j=0;j<=N*200;j++){ 36 if(f[i-1][j]>=1e8) continue; 37 f[i][j+p[i].q]=min(f[i][j+p[i].q],max(f[i-1][j],j+p[i].q+p[i].e)); 38 f[i][j]=min(f[i][j],max(f[i-1][j],st[i]-j+p[i].e)); 39 } 40 } 41 int ans=1e9; 42 for(j=0;j<=N*200;j++) 43 ans=min(ans,f[N][j]); 44 printf("%d\n",ans); 45 return 0; 46 }?
轉(zhuǎn)載于:https://www.cnblogs.com/Ressed/p/9833565.html
總結(jié)
以上是生活随笔為你收集整理的luogu2577/bzoj1899 午餐 (贪心+dp)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 让.NET程序会说话
- 下一篇: 开发外包注意事项——iOS APP的开发