问题:有n 个物品,它们有各自的重量和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和?
解题思路:我们可以建立一个二维数组v[n][c]来存储装入物品的最大价值。其中a[i][j]表示当有i个物品,最大载重为j时,能装入背包物品的最大价值;
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,c;
cin>>n>>c;
int a[10],b[10];
for(int i=1;i<=n;i++)
{
cin>>a[i]>>b[i];
}
int v[10][10];
memset(v,0,sizeof(v));
int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=c;j++)
{
if(j>=a[i])
v[i][j]=max(v[i-1][j],v[i-1][j-a[i]]+b[i]);
else
v[i][j]=v[i-1][j];
}
for(i=0;i<=n;i++)//打表
{
for(j=0;j<=c;j++)
cout<<v[i][j]<<' ';
cout<<endl;
}
return 0;
}