01背包问题 怎样输出选择的那些物品放入了背包

CraftinA 2009-04-22 10:51:10
#include<iostream>

using namespace std;

const int n=5,C=20;
//int selected[21][6];
int main()
{
int find(int s[],int v[]);
int s[n+1]= {0,7,13,6,4,3},v[n+1]= {0,5,7,3,2,3};
int maxValue;
maxValue=find(s,v);
cout<<"maxValue="<<maxValue<<endl;
/*for(int i=1;i<=n;i++)
cout<<selected[C][i]<<' ';*/
system("pause");
return 0;
}

int find(int s[],int v[])
{
int V[n+1][C+1];
int i,j;
for(i=0;i<=n;i++)
V[i][0]=0;
for(j=0;j<=C;j++)
V[0][j]=0;
for(i=1;i<=n;i++)
{
for(j=0;j<=C;j++)
{
V[i][j]=V[i-1][j];
if(s[i] <= j && V[i-1][j] < V[i-1][j-s[i]]+v[i])
{
V[i][j]=V[i-1][j-s[i]]+v[i];
/*if(j==C)
{
selected[j][i]=1;
}*/
}

}
}

return V[n][C];
}


上面是用动态规划写的程序 最优解已经求出来是13了 但是如果要输出选择了那些物品放入了背包而得出的最优解 那么应该怎么设置标志数组呢 或者用其他的方法能得到呢?
...全文
1415 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
http://blog.csdn.net/topgun_topgun/archive/2007/06/20/1659988.aspx
jn989 2009-04-22
  • 打赏
  • 举报
回复
lz仔细看看这个链接,里面讲了如何输出结果和优化问题:
http://blog.csdn.net/Simon_Ghost/archive/2006/11/20/1398157.aspx
S_zxing 2009-04-22
  • 打赏
  • 举报
回复
帮顶……
baiwei156 2009-04-22
  • 打赏
  • 举报
回复
呵呵,我们学密码学的时候也讲过这个
帅得不敢出门 2009-04-22
  • 打赏
  • 举报
回复
这个网上代码很多。优化版会把楼主所说的功能去掉。
lgrsolider12 2009-04-22
  • 打赏
  • 举报
回复
楼主有深度,数据安全加密的问题都亲自实现了

64,637

社区成员

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

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