有n个物品。第i个物品的体积为Vi,重量为Wi。选一些物品装到一个容量为C的背包,使得背包内物品在总体积不超过C的前提下重量尽量大。1<=n<=100,
1<=Vi<=C<=1000,1<=Wi<=10^6。
思路:
dp[i][j]表示在第i个物品之后的物品中取出容量等于j的体积的最大重量。
dp[i][j] = max(dp[i+1][j], dp[i+1][j - V[i]] + W[i]);
#include <iostream>
#include <math.h>
using namespace std;
void fun(int V[], int W[], int n, int C)
{
int dp[101][1001];
for (int i = 0; i <= C; i++)
{
dp[n][i] = 0;
}
for (int i = n - 1; i >= 0 ; i--)
{
for (int j = 0; j <= C; j++)
{
if (j >= V[i])
{
dp[i][j] = max(dp[i + 1][j], dp[i + 1][j - V[i]] + W[i]);
}
else
{
dp[i][j] = dp[i + 1][j];
}
}
}
cout << "result " << dp[0][C] << endl;
}
int main(int argc, char *argv[])
{
int V[3] = {1, 6, 3};
int W[3] = {1, 2, 3};
fun(V, W, 3, 7);
return 0;
}