洛谷 P1064 金明的預算方案

2021-08-27 05:42:45 字數 792 閱讀 7306

這是乙個揹包型別的問題,但是存在附件這個問題,因為要拿附件就一定要拿主件,而且附件最多只有2種,假設有2種附件,那麼這個物品就有三種狀態

第一種就是只拿主鍵,dp[j] = max(dp[j], dp[j-now[i].v] + now[i].v*now[i].p);

第二種就是那主鍵和第乙個附件  dp[j] = max(dp[j], dp[j-now[i].v-vec[i][0].v] + now[i].v*now[i].p+vec[i][0].v*vec[i][0].p);

第三種就是拿主鍵和第二個附件,基本同上。

第四種就是拿主鍵和兩個附件,dp[j] = max(dp[j], dp[j-now[i].v-vec[i][0].v-vec[i][1].v]+now[i].v*now[i].p+vec[i][1].v*vec[i][1].p+vec[i][0].v*vec[i][0].p);

然後按照揹包問題的轉移方式做就可以了,滾動一下優化空間,**如下。

#include using namespace std;

const int maxn = 1e2 + 10;

int dp[maxn*1000],v[maxn][4],val[maxn],q[maxn],a[maxn];

struct node now[maxn];

vectorvec[maxn];

int main()

}for (int i=1; i<=m; i++) }}

cout << dp[n] << endl;

return 0;

洛谷 P1064 金明的預算方案

題目描述 金明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間金明自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說 你的房間需要購買哪些物品,怎麼布置,你說了算,只要不超過n元錢就行 今天一早,金明就開始做預算了,他把想買的物品分為兩類 主件與附件,附件是從屬於某個主件的,下表就是一些主件...

洛谷 P1064 金明的預算方案

題目描述 金明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間金明自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說 你的房間需要購買哪些物品,怎麼布置,你說了算,只要不超過n元錢就行 今天一早,金明就開始做預算了,他把想買的物品分為兩類 主件與附件,附件是從屬於某個主件的,下表就是一些主件...

P1064 金明的預算方案(洛谷)

思路 因為每個主件最多只有兩個附件,所以列舉每個主件如果滿足條件的話可以分為五種情況購買 什麼都不買 只買主件 買主件和第乙個附件 買主件和第二個附件 買主件和兩個附件。然後分別計算出每種情況的物品 與重要度乘積之和,最後取最大值即可.include using namespace std int ...