动态规划法求解背包问题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

算法分析与设计实验报告

附录:完整代码

#include

#include

int V[200][200];//前i个物品装入容量为j的背包中获得的最大价值int max(int a,int b) //一个大小比较函数,用于当总重大于第I行时{

if(a>=b)

return a;

else return b;

}

int Knap(int n,int w[],int v[],int x[],int C)

{

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=0;i<=n-1;i++)

for(j=0;j<=C;j++)

if(j

V[i][j]=V[i-1][j];

else

V[i][j]=max(V[i-1][j],V[i-1][j-w[i]]+v[i]);

j=C;

for(i=n-1;i>=0;i--)

{

if(V[i][j]>V[i-1][j])

{

x[i]=1;

j=j-w[i];

}

else

x[i]=0;

}

printf("选中的物品是:\n");

for(i=0;i

printf("%d ",x[i]);

printf("\n");

return V[n-1][C];

}

int main()

{

int s;//获得的最大价值

int w[4];//物品的重量

int v[4];//物品的价值

int x[4];//物品的选取状态选中则是1 没选中为0 int n,i;

int C;//背包最大容量

n=4;

printf("请输入背包的最大容量:\n");

scanf("%d",&C);

printf("物品数:\n");

scanf("%d",&n);

printf("请分别输入物品的重量:\n");

for(i=0;i

scanf("%d",&w[i]);

printf("请分别输入物品的价值:\n");

for(i=0;i

scanf("%d",&v[i]);

s=Knap(n,w,v,x,C); //调用核心函数

printf("最大物品价值为:\n");

printf("%d\n",s);

system("pause");

return 0;

}

相关文档
最新文档