洛谷傳送門:
題意簡述:總時間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只...