问题描述:给定n种物品和一背包。物品i的重量是wi,体积是vi,其价值是vi,背包容量c,背包体积为d。问如何选择装入背包中的物品,使得装入背包中物品的总价值最大?在选择装入背包的的物品时,每种物品只有两种选择,即装入背包或不装入背包,不能将物品i装入背包多次,也不能只装入物品的部分。
求代码!
一维的时候还好,二维的不知道怎么编码了! 求Java代码!
谢谢大神们!!
http://www.cnblogs.com/xiaofanke/archive/2012/08/22/2651290.html
http://www.cnblogs.com/xiaofanke/archive/2012/08/22/2651290.html
int main()
{
int n, v;
int w[100];
int c[100];
int dp[100][100];
//n代表有多少个物品 v代表背包的容量
while(~scanf("%d%d", &n, &v))
{
for(int i = 1; i <= n; ++ i)
{
scanf("%d", &c[i]);
//c[i]代表第i件物品所需要的空间
}
for(int i = 1; i <= n; ++ i)
{
scanf("%d", &w[i]);
//w[i]代表第i件物品的价值
}
memset(dp, 0, sizeof(dp));
for(int i = 1; i <= n; ++ i)
{
for(int j = 1; j <= v; ++ j)
{
dp[i][j] = dp[i - 1][j];
if(j >= c[i])
{
//买与不买两种选择
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - c[i]] + w[i]);
}
}
}
printf("%d\n", dp[n][v]);
}
return 0;
}