CH5202 自然数拆分问题Lunatic版(算法竞赛指南,完全背包)
发布时间
阅读量:
阅读量
算法竞赛进阶指南,278页,完全背包
本题要点:
1、基于完全背包模型进行优化即可。
常规完全背包问题:
包含n个物品,在这些物品中,
每个物品具有体积v[i]和价值w[i],
目标是在一个容量为m的大背包中,
实现最大价值(每个物品可选任意多次)。
动态规划状态转移方程:
对于每一个状态j(从1到m),
有f(j) = max{ f(j), f(j - v[i]) + w[i] }
其中j从小到大依次计算。
2、问题转换思路:
将问题转化为计数类问题:
包含n个物品,在这些物品中,
每个物品具有体积v[i]和价值1,
目标是在一个容量为m的大背包中,
计算有多少种不同的组合方式。
动态规划状态转移方程:
对于每一个状态j(从1到m),
有f(j) = f(j) + f(j - v[i])
其中j从小到大依次计算。
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int MaxN = 4010;
int v[MaxN], w[MaxN];
int n;
long long f[MaxN]; //f[j]表示到小为i的背包, 一共有多少种装法装满
long long mod = 21
全部评论 (0)
还没有任何评论哟~
