CH 5201 数字组合问题(算法竞赛指南, 01背包)
发布时间
阅读量:
阅读量
算法竞赛进阶指南,277页,01背包
本题关键点:
1、对01背包的代码进行适当调整即可。通常情况下,01背包问题描述如下:
设有n个物品,每个物品的体积为v[i],对应的价值为w[i],目标是将这些物品装入容量为m的背包中,使得获得的价值最大。
其中f[j]表示容量为j的背包所能承载的最大价值。其状态转移方程为:
f[j] = max(f[j], f[j - v[i]] + w[i]);
2、题目含义转换:
设有n个物品,每个物品的体积为v[i],对应的价值为1,目标是将这些物品装入容量为m的背包中,并统计所有可能的装法数量。
此时f[j]表示容量为j的背包所能实现的不同装法总数。其状态转移方程可表示为:
f[j] = f[j] + f[j - v[i]]; // 不选择第i个物品与选择第i个物品的情况
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int MaxN = 10010;
int v[MaxN], w[MaxN]; //体积重量
int f[MaxN]; //f[i] 和为i有多少种方案
int a[MaxN];
int n,
全部评论 (0)
还没有任何评论哟~
