算法导论答案 16.2-2 0-1背包问题的动态规划算法
生活随笔
收集整理的這篇文章主要介紹了
算法导论答案 16.2-2 0-1背包问题的动态规划算法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
//16.2-2 動態規劃算法求解0-1背包問題#include <iostream>
using namespace std;#define W 50
#define N 3
int v[N+1]={0,60,100,120};//物品價值
int w[N+1]={0,10,20,30};//物品重量
int c[N+1][W+1]={0};//c[i][j]表示在剩余容量為j的情況下,對于物品1.....i所能達到的最大價值
int x[N+1]={0};void Dynamic_Knapsack(int v[],int w[],int n,int weight)//求解最大價值
{for(int j=0;j<=weight;++j)//c[0][j]=0;for(int i=1;i<=n;++i){c[i][0]=0;for(int j=1;j<=weight;++j){if(w[i]<=j)//當還有還有剩余容量時{if(v[i]+c[i-1][j-w[i]]>c[i-1][j])//此時選擇裝入物品ic[i][j]=v[i]+c[i-1][j-w[i]];else//不裝入物品ic[i][j]=c[i-1][j];}elsec[i][j]=c[i-1][j];}}
}
void TraceBack(int c[][W+1],int w[],int weight,int n,int x[])//選擇被選中的物品
{for(int i=n;i>=1;--i){if(c[i][weight]==c[i-1][weight])//物品i未被選中{x[i]=0;}else//物品i被選中{x[i]=1;weight=weight-w[i];}}
}void main()
{Dynamic_Knapsack(v,w,N,W);cout<<"The largest value is "<<c[N][W]<<endl;TraceBack(c,w,W,N,x);for(int i=1;i<=N;i++){if(x[i]==1)cout<<"Item "<<i<<" is selected!"<<endl;}cout<<endl;
}
總結
以上是生活随笔為你收集整理的算法导论答案 16.2-2 0-1背包问题的动态规划算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021年最佳开源软件榜单出炉!
- 下一篇: 微机综合保护装置怎么选择?在高压柜中起什