傳送門
一道非常好的dp。看這個可能會覺得與01揹包很像,不過這個的問題在於現做的菜餚會影響到後面的菜餚的價值。
我們在進行01揹包dp時,一件物品的價值是不隨著其被列舉的位置改變而改變的,但是這道題中不行。假設你現在有兩種菜餚,你先做第一種會導致第二種的價值受損,反之第一種的價值就會受損,我們並不能立即知道哪種更優,而正常的01揹包在dp的時候已經選過的物品就完全不再考慮了,所以如果這樣的話,被更優的答案放在後面在本題中計算會出錯。
那我們就有了另一種方法,把最優的放在前面,這樣依次排序即可。具體怎麼排?你選取兩種狀態自行列式兩邊消去後發現,對於狀態x,y,如果有c[x]*b[y]
看一下**。
#include#include#include
#include
#include
#include
#include
#define rep(i,a,n) for(int i = a;i <= n;i++)
#define per(i,n,a) for(int i = n;i >= a;i--)
#define enter putchar('\n')
using
namespace
std;
typedef
long
long
ll;const
int m = 50005
;ll read()
while(ch >= '
0' && ch <= '9'
)
return ans *op;
}struct
food
}f[60
];ll t,n,dp[
100005],maxn = -1
;int
main()
變種dp 洛谷P1417 烹調方案
由於你的幫助,火星只遭受了最小的損失。但gw懶得重建家園了,就造了一艘飛船飛向遙遠的earth星。不過飛船飛到一半,gw發現了乙個很嚴重的問題 肚子餓了 gw還是會做飯的,於是拿出了儲藏的食物準備填飽肚子。gw希望能在t時間內做出最美味的食物,但是這些食物美味程度的計算方式比較奇葩,於是絕望的gw只...
動態規劃 烹調方案
題目 由於你的幫助,火星只遭受了最小的損失。但gw懶得重建家園了,就造了一艘飛船飛向遙遠的earth星。不過飛船飛到一半,gw發現了乙個很嚴重的問題 肚子餓了 gw還是會做飯的,於是拿出了儲藏的食物準備填飽肚子。gw希望能在t時間內做出最美味的食物,但是這些食物美味程度的計算方式比較奇葩,於是絕望的...
洛谷 P1417 烹調方案 揹包dp
由於你的幫助,火星只遭受了最小的損失。但gw懶得重建家園了,就造了一艘飛船飛向遙遠的earth星。不過飛船飛到一半,gw發現了乙個很嚴重的問題 肚子餓了 gw還是會做飯的,於是拿出了儲藏的食物準備填飽肚子。gw希望能在t時間內做出最美味的食物,但是這些食物美味程度的計算方式比較奇葩,於是絕望的gw只...