多維DP P1417 烹調方案

2021-09-24 13:35:15 字數 895 閱讀 3009

洛谷傳送門:

題意簡述:總時間t,有n種食材,每件食材有三個屬性,ai,bi和ci,如果在t時刻完成第i樣食材則得到ai-t*bi的美味指數,用第i件食材做飯要花去ci的時間。問在t時間內最大美味指數為多少?

乍一看題目,很容易聯想到0-1揹包,仔細看此題的權值是不固定的,所以選取次序的不同會導致最大權值的不同。

所以我們在進行0-1揹包選擇前要先對n種食材進行排序。排序無非就是加乙個排序規則。

以下是排序規則的推導:

假設有兩種食材x、y。

我們需要權值大的在前面,所以先選x再選y的權值是要大於先選y再選x的權值的。

將其轉化成數學表示式

a[x]-(p+c[x])*b[x]+a[y]-(p+c[x]+c[y])*by

a[y]-(p+c[y])*b[y]+a[x]-(p+c[y]+c[x])*bx

化簡可以得到

當x>y時,c[x]*b[y]

可以依此寫出排序規則。

排好序後可以直接寫乙個0-1揹包的模板

#include #define ll long long

using namespace std;

const int max = 100010;

ll t,n;

ll dp[max] = ;

struct nodenode[max];

//排序規則

bool cmp(const node &a,const node &b)

int main()

}ll maxx = -1;

for(ll i = 0 ; i <= t; i++)

cout

}

洛谷1417 烹調方案

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

P1417 烹調方案

p1417 烹調方案 題目提供者tinylic 標籤動態規劃 難度普及 提高 題目背景 由於你的幫助,火星只遭受了最小的損失。但gw懶得重建家園了,就造了一艘飛船飛向遙遠的earth星。不過飛船飛到一半,gw發現了乙個很嚴重的問題 肚子餓了 gw還是會做飯的,於是拿出了儲藏的食物準備填飽肚子。gw希...

P1417 烹調方案

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