洛谷P1417 烹調方案

2021-09-04 21:50:19 字數 647 閱讀 9928

這道題不同於普通的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[j])*b[j]       +      a[i]-(t+c[i]+c[j])*b[i]

消去相等項,得到

先i:-c[i]*b[j]      先j:-c[j]*b[i]

故i排在j前時,必須滿足c[i]b[j]故按此策略排序,就轉化為普通的01揹包問題,因為儘管先選擇某件物品會對後面選擇的總價值造成影響,但不影響得到最優解,滿足「無後效性」。

設f(i,j):前i件食材,總j時間且在j時刻完成一道菜對應的最大美味指數。最後答案就是max。

注意開long long,否則會溢位。

#includeusing namespace std;

long long n,t,d[100005],maxn;

struct vegetable

}int main()

洛谷P1417 烹調方案

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

洛谷 P1417烹調方案

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

洛谷 P1417烹調方案

一共有n件食材,每件食材有三個屬性,ai,bi和ci,如果在t時刻完成第i樣食材則得到ai t bi的美味指數,用第i件食材做飯要花去ci的時間。求最大美味指數之和。顯然的0 1揹包,但是,它與平常的0 1揹包不同之處在於 平常的物品不會因為時間的延續而使價值貶值,也就是說,先放a 先放b是無所謂的...