背包问题

genguyige 2010-03-31 05:12:44
我用动态规划写了一个极其简单的背包问题 编译可以通过 答案也是正确的 但是我只可以得到最优的值 而没有办法把那组解找出来 请大家给点思路 拜谢!!
#include<iostream>
using namespace std;
int baibao(int a[],int b[],int sum);
int main()
{
int a[10];
int b[10];
cout<<"请输入四个物品所对应的质量:"<<endl;
for(int i=1;i<=4;i++)
cin>>a[i];
cout<<"请输入四个物品所对应的价值:"<<endl;
for(i=1;i<=4;i++)
cin>>b[i];
cout<<"请出入背包的总容量"<<endl;
int sum;
cin>>sum;
cout<<baibao(a,b,sum)<<endl;
return 1;
}
int baibao(int a[],int b[],int sum)
{
int i=0;
int j=0;
int v[11][100];
for(i=0;i<10;i++)
{
v[0][i]=0;
v[i][0]=0;
}
for(i=1;i<=4;i++)
for(j=1;j<=sum;j++)
{
v[i][j]=v[i-1][j];
if(j>=a[i])
{
v[i][j]=v[i][j]>(v[i-1][j-a[i]]+b[i])?v[i][j]:(v[i-1][j-a[i]]+b[i]);
}
}
for(i=0;i<=4;i++)
{
for(j=0;j<=9;j++)
cout<<v[i][j]<<"\t";
cout<<endl;
}
return v[4][sum];
}
...全文
74 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
genguyige 2010-03-31
  • 打赏
  • 举报
回复
求救啊 这个办法似乎不可以呀
genguyige 2010-03-31
  • 打赏
  • 举报
回复
我同学也是这么告诉我的 但是原理呢?
q441375197 2010-03-31
  • 打赏
  • 举报
回复
在baibao()函数中定义一个标记数组x[5]
x[i]=0 未装入
x[i]=1 已装入

j=sum;
for(i=4;i>0;i--)
if(v[i][j] == v[i-1][j])
x[i]=0;
else
{
x[i]=1;
j=j-a[i];
}


注意:这儿要用到sum
genguyige 2010-03-31
  • 打赏
  • 举报
回复
朋友告诉我可以标记 但是我不知道怎么弄 先自己顶个!

64,662

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧