
思路: 这是一道01背包问题, 只有选与不选的这两种情况, 但是这题物品的属性比起普通的01背包只有重量和价值以外多了主件/附件这一属性, 再看题目中"每个主件可以有0个、1个或2个附件"这一句话,一种物品的所有选择情况只有:1.只选择主件 2.选择主件+附件1 3.只选择主件和附件2 4.选择主件和所有附件, 那么我们很容易就能得到状态转移方程dp[i]= max{dp[i], dp[i-w]+v(i>=w), dp[i-w-w1]+v+v1(i>=w+w1), dp[i-w-w2]+v+v2(i>=w+w2), dp[i-w-w1-w2]+v+v1+v2(i>=w+w1+w2) }
/**
* 题目: 洛谷OJ P1064 金明的预算方案
* 题型: 01背包
**/
#include <vector>
#include <cstdio>
#include <iostream>
using namespace std;
const int maxn = 32000+10, maxm = 60+10;
int dp[maxn], dp_max[maxn], k, n, m;
struct Goods{

这道题目涉及01背包问题,其中物品拥有主件和附件属性。每个主件可以选择0、1或2个附件。解题关键在于理解四种选择情况,并构建状态转移方程:dp[i] = max{dp[i], dp[i-w]+v, dp[i-w-w1]+v+v1, dp[i-w-w2]+v+v2, dp[i-w-w1-w2]+v+v1+v2},其中w、w1、w2分别为主件和附件的重量,v、v1、v2为对应价值,i为主件及附件总重量的限制。"
126938920,15263287,基于Springboot的酒店管理系统开发实战,"['spring boot', 'mybatis', 'vue.js', 'java开发', 'web应用']
最低0.47元/天 解锁文章
286

被折叠的 条评论
为什么被折叠?



