1. 程式人生 > >洛谷 P1417 烹調方案

洛谷 P1417 烹調方案

比較 重建 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 struct
kkk { 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 烹調方案