/*
n背包
i个物品在体积为j的背包中最大的价值为max(第i个物品装0个,装1个……装j/i.weight)
w 3 2 5
#include<iostream>
using namespace std;
struct item{
int weight;
int value;
};
int main(){
item Item[4]={0,0,3,8,2,5,5,12};
int c[4][6]={0},k=0;//c[i][j]表示第前i个物品装在体积为j的背包中最大的价值
int _max=0;
for(int i=1;i<4;i++){
for(int j=1;j<6;j++){
k=j/Item[i].weight;
for(int t=0;t<=k;t++){
c[i][j]=c[i][j-t*Item[i].weight]+t*Item[i].value>c[i][j]?c[i][j-t*Item[i].weight]+t*Item[i].value:c[i][j];
}
c[i][j]=c[i][j]>c[i-1][j]?c[i][j]:c[i-1][j];
cout<<c[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
n背包
i个物品在体积为j的背包中最大的价值为max(第i个物品装0个,装1个……装j/i.weight)
w 3 2 5
v 8 5 12 背包容量为5
0 1 2 3 4 5
3 0 0 0 8 8 8
2 0 0 5 8 10 13
5 0 0 0 8 10 13
*/#include<iostream>
using namespace std;
struct item{
int weight;
int value;
};
int main(){
item Item[4]={0,0,3,8,2,5,5,12};
int c[4][6]={0},k=0;//c[i][j]表示第前i个物品装在体积为j的背包中最大的价值
int _max=0;
for(int i=1;i<4;i++){
for(int j=1;j<6;j++){
k=j/Item[i].weight;
for(int t=0;t<=k;t++){
c[i][j]=c[i][j-t*Item[i].weight]+t*Item[i].value>c[i][j]?c[i][j-t*Item[i].weight]+t*Item[i].value:c[i][j];
}
c[i][j]=c[i][j]>c[i-1][j]?c[i][j]:c[i-1][j];
cout<<c[i][j]<<" ";
}
cout<<endl;
}
return 0;
}