C/C++ 01背包问题纠错,出现了问题,谢谢各位。
//背包问题:有m件物品和一个承重为t的背包。第i件物品的重量是w[i],价值是v[i]。//求解将哪些物品装入背包可使这些物品的重量总和不超过背包承重量t,且价值总和最...
//背包问题:有m件物品和一个承重为t的背包。第i件物品的重量是w[i],价值是v[i]。
//求解将哪些物品装入背包可使这些物品的重量总和不超过背包承重量t,且价值总和最大。
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(int argc, char *argv[]) {
int w[]={0,4,6,2,2,5,1}; //重量
int v[]={0,8,10,6,3,7,2}; //价值
int f[1001];//f记录不同重量时的价值
memset(f,0,sizeof(f)); //所有价值初始化为0
int t;
scanf("%d",&t); //背包重量t
for(int i = 1;1 <= t;i++){ //尝试放入每一件物品。
for(int m = t;t >= w[i];t--){
f[m] = max(f[m],f[m-w[i]] + v[i]);
}
}
printf("%d",f[t]);
return 0;
}
#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
int main(int argc, char *argv[]) {
int w[]={0,4,6,2,2,5,1}; //重量
int v[]={0,8,10,6,3,7,2}; //价值
int f[1001];//f记录不同重量时的价值
memset(f,0,sizeof(f)); //所有价值初始化为0
int t;
scanf("%d",&t); //背包重量t
for(int i = 1;1 <= 6;i++){ //尝试放入每一件物品。
for(int m = t;m >= w[i];m--){
f[m] = max(f[m-1],f[m-w[i]] + v[i]);
}
}
printf("%d",f[t]);
return 0;
}
改进之后还是不行 展开
//求解将哪些物品装入背包可使这些物品的重量总和不超过背包承重量t,且价值总和最大。
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(int argc, char *argv[]) {
int w[]={0,4,6,2,2,5,1}; //重量
int v[]={0,8,10,6,3,7,2}; //价值
int f[1001];//f记录不同重量时的价值
memset(f,0,sizeof(f)); //所有价值初始化为0
int t;
scanf("%d",&t); //背包重量t
for(int i = 1;1 <= t;i++){ //尝试放入每一件物品。
for(int m = t;t >= w[i];t--){
f[m] = max(f[m],f[m-w[i]] + v[i]);
}
}
printf("%d",f[t]);
return 0;
}
#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
int main(int argc, char *argv[]) {
int w[]={0,4,6,2,2,5,1}; //重量
int v[]={0,8,10,6,3,7,2}; //价值
int f[1001];//f记录不同重量时的价值
memset(f,0,sizeof(f)); //所有价值初始化为0
int t;
scanf("%d",&t); //背包重量t
for(int i = 1;1 <= 6;i++){ //尝试放入每一件物品。
for(int m = t;m >= w[i];m--){
f[m] = max(f[m-1],f[m-w[i]] + v[i]);
}
}
printf("%d",f[t]);
return 0;
}
改进之后还是不行 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询