动态规划之01背包问题
2013-10-22 23:25
239 查看
[cpp] view
plaincopy
#include
using namespace std;
int c[10][100];
int Knapsack(int n,int m)
{
int i,j;
int w[10],v[10];
for(i=1;i<=n;i++)
scanf("%d%d",&w[i],&v[i]);
for(i=0;i<10;i++)
for(j=0;j<100;j++)
c[i][j]=0;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
if(w[i]<=j)
{
if(c[i-1][j]
c[i][j]=v[i]+c[i-1][j-w[i]];
else//否则不更新
c[i][j]=c[i-1][j];
}
else
c[i][j]=c[i-1][j];
}
return c
[m];
}
int main()
{
int n,m;
printf("input m and n/n");
scanf("%d%d",&m,&n);
printf("%d",Knapsack(n,m));
printf("/n");
int i,j;
for(i=0;i<=n;i++)
{
for(j=0;j<=m;j++)
printf("=",c[i][j]);
printf("/n");
}
return 0;
}
上面的算法没有提供找最优解序列的方法,下面给出找最有解序列的代码
[c-sharp] view
plaincopy
#include
using namespace std;
int c[10][100];
int x[10];//存放最优解
int Knapsack(int n,int m,int w[],int v[])
{
int i,j;
for(i=0;i<10;i++)
for(j=0;j<100;j++)
c[i][j]=0;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
if(w[i]<=j)
{
if(c[i-1][j]
{
c[i][j]=v[i]+c[i-1][j-w[i]];
}
else//否则不更新
{
c[i][j]=c[i-1][j];
}
}
else
{
c[i][j]=c[i-1][j];
}
}
return c
[m];//矩阵的最后一个为最优解。
}
void Trackback(int c[][100],int w[],int m,int n)
{
int i;
for(i=n;i>0;i--)
{
if(c[i][m]==c[i-1][m])//表示序号为i的物品没有被装入背包
x[i]=0;
else
{
x[i]=1;
m-=w[i];
}
}
}
int main()
{
int n,m;
int i,j;
printf("input m and n/n");
scanf("%d%d",&m,&n);
int w[10],v[10];
for(i=1;i<=n;i++)
scanf("%d%d",&w[i],&v[i]);
printf("%d",Knapsack(n,m,w,v));
printf("/n");
for(i=0;i<=n;i++)
{
for(j=0;j<=m;j++)
printf("=",c[i][j]);
printf("/n");
}
Trackback(c,w,m,n);//找最优解
for(i=1;i<=n;i++)
cout<<x[i]<<" ";
cout<<endl;
return 0;
}
http://blog.csdn.net/xw13106209/article/details/4942400
相关文章推荐
- 动态规划 - 01背包问题
- 双核处理(动态规划的01背包问题)
- 题目1025:最大报销额(动态规划之01背包问题)
- 动态规划之01背包问题 通俗理解动态规划的过程
- 动态规划之01背包问题(最易理解的讲解)(转载)
- 动态规划-01背包问题
- 动态规划之01背包问题
- 从01背包问题理解动态规划---初体验
- 动态规划(01背包问题)—— 双核处理
- 动态规划:最少硬币找零问题、01背包问题、完全背包问题
- 算法进阶之动态规划-01背包问题
- 动态规划--01背包问题
- 动态规划之01背包问题
- Sicily 1146 采药(DP动态规划——01背包问题)
- 动态规划之01背包问题(最易理解的讲解)
- 【01背包问题】:动态规划、回溯法和分支限界法 三种算法的对比与分析(时间复杂度方面)
- 动态规划 - 01背包问题
- 动态规划-----背包问题-----01背包,完全背包,多重背包
- 从01背包问题理解动态规划---初体验
- 动态规划 -- 01背包问题