动态规划基础
题目一:01背包问题
一个背包总容量为V,现在有N个物品,第i个 物品体积为weight[i],价值为value[i],现在往背包里面装东西,怎么装能使背包的内物品价值最大?
分析:用dp[i][j]表示前i件物品,在容量为j时的最大价值
则dp[i][j]可能等于两个值:
1. 前(i-1)件物品,容量为j时的最大价值,意即没有加第j件物品,即dp[i-1][j]
2. 前(i-1)件物品,容量为(j-weight[i])时的最大价值再加上第i件物品的价值,意即加上了第j件物品,即dp[i-1][j-weight[i]]+value[i]
代码如下
#include<iostream>
using namespace std;
#define max(x,y) (x)>(y)?(x):(y)
int main()
{
int N,V;
cin>>N; //物品个数
cin>>V; //背包容量
unsigned int dp[N+1][V+1]; //dp[i][j]表示前i件物品,在容量为j时的最大价值
unsigned int weight[N+1]; //保存单个物品重量