洛谷 P1417 烹調方案 揹包dp

2021-09-25 10:40:03 字數 1238 閱讀 7529

由於你的幫助,火星只遭受了最小的損失。但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

5022

47

輸出樣例#1

408
【資料範圍】

對於40%的資料1<=n<=10

對於100%的資料1<=n<=50

所有數字均小於100,000

揹包的本質:用每個可執行的動作(物品)對各個狀態更新。物品選或不選,用的是前面的狀態。

平時做01揹包的時候,由於i物品的價值不會變,所以物品i的順序對結果沒有影響。但是在本題,由於物品價值會因為時間的變化而變化,直接01揹包會錯。

本蒟蒻看到這題並不會做。所以看的題解。

#include #include #include #define ll long long int

using namespace std;

ll t,n,s,dp[100001];

typedef struct

lxydl;

lxydl d[51];

inline bool cmp(lxydl a,lxydl b)

for(i=1;i<=n;i++)

for(i=1;i<=n;i++)

sort(d+1,d+n+1,cmp);

for(i=1;i<=n;i++) }

ll maxn(0);

for(i=1;i<=t;i++)

cout

}

洛谷P1417 烹調方案 貪心 揹包dp

題目大意 一共有 n 件食材,每件食材有三個屬性,ai,bi和ci,如果在t時刻完成第i樣食材則得到ai t bi的美味指數,用第i件食材做飯要花去ci的時間。眾所周知,gw的廚藝不怎麼樣,所以他需要你設計烹調方案使得美味指數最大。題解 這道題需要對揹包問題有更加深入的理解。可以發現,如果不進行排序...

洛谷P1417 烹調方案

由於你的幫助,火星只遭受了最小的損失。但gw懶得重建家園了,就造了一艘飛船飛向遙遠的earth星。不過飛船飛到一半,gw發現了乙個很嚴重的問題 肚子餓了 gw還是會做飯的,於是拿出了儲藏的食物準備填飽肚子。gw希望能在t時間內做出最美味的食物,但是這些食物美味程度的計算方式比較奇葩,於是絕望的gw只...

洛谷P1417 烹調方案

這道題不同於普通的01揹包,不同的先選擇的做菜策略會對之後產生不同的影響,即不滿足 無後效性 但是,考慮一種選擇策略,假設有兩個先後做的菜i和j,交換他們的順序會產生什麼影響呢?假設ij之前的時間為t 先i後j a i t c i b i a j t c i c j b j 先j後i a j t c...