洛谷 P1417 烹調方案
阿新 • • 發佈:2019-02-12
比較 重建 pri strong def 題目 tro 得到 pan
題目背景
由於你的幫助,火星只遭受了最小的損失。但gw懶得重建家園了,就造了一艘飛船飛向遙遠的earth星。不過飛船飛到一半,gw發現了一個很嚴重的問題:肚子餓了~
gw還是會做飯的,於是拿出了儲藏的食物準備填飽肚子。gw希望能在T時間內做出最美味的食物,但是這些食物美味程度的計算方式比較奇葩,於是絕望的gw只好求助於你了。
題目描述
一共有n件食材,每件食材有三個屬性,ai,bi和ci,如果在t時刻完成第i樣食材則得到ai-t*bi的美味指數,用第i件食材做飯要花去ci的時間。
眾所周知,gw的廚藝不怎麽樣,所以他需要你設計烹調方案使得美味指數最大
輸入輸出格式
輸入格式:
第一行是兩個正整數T和n,表示到達地球所需時間和食材個數。
下面一行n個整數,ai
下面一行n個整數,bi
下面一行n個整數,ci
輸出格式:
輸出最大美味指數
輸入輸出樣例
輸入樣例#1:74 1
502
2
47
輸出樣例#1: 408
說明
【數據範圍】
對於40%的數據1<=n<=10
對於100%的數據1<=n<=50
所有數字均小於100,000
1 #include<cstdio> 2 #include<algorithm> 3 #define ll long long 4 using namespace std; 5 ll t,n,ans,f[1000000]; 6 structkkk { 7 ll a,b,c; 8 }e[1000000]; 9 bool cmp(kkk q,kkk p) { 10 return q.c * p.b < p.c * q.b; 11 } 12 int main() 13 { 14 scanf("%d%d",&t,&n); 15 for (int i = 1; i <= n; i++) 16 scanf("%d", &e[i].a); 17 for (int i = 1; i <= n; i++) 18 scanf("%d", &e[i].b);19 for (int i = 1; i <= n; i++) 20 scanf("%d", &e[i].c); 21 sort(e+1,e+n+1,cmp); 22 for(int i = 1;i <= n; i++) 23 for(int j = t;j - e[i].c >= 0; j--) 24 f[j] = max(f[j],f[j - e[i].c] + e[i].a - j * e[i].b) ;//ans = max(ans,f[j]) 25 ll maxx = 0; 26 for(ll i = 1; i <= t; i++) 27 maxx = max(f[i], maxx); 28 29 printf("%d",maxx); 30 31 32 33 34 35 return 0; 36 }
洛谷 P1417 烹調方案