算法设计与分析期末考试题
#include<stdio.h>
int n,c,bestp;//物品的个数,背包的容量,最大价值
int p[10000],w[10000],x[10000],bestx[10000];//物品的价值,物品的重量,x[i]暂存物品的选中情况,物品的选中情况
void Backtrack(int i,int cp,int cw)
{ //cw当前包内物品重量,cp当前包内物品价值
int j;
if(i>n)//回溯结束
{
if(cp>bestp)
{
bestp=cp;
for(i=0;i<=n;i++) bestx[i]=x[i];
}
}
else
for(j=0;j<=1;j++)
{
x[i]=j;
if(cw+x[i]*w[i]<=c)
{
cw+=w[i]*x[i];
cp+=p[i]*x[i];
Backtrack(i+1,cp,cw);
cw-=w[i]*x[i];
cp-=p[i]*x[i];
}
}
}
int main()
{
int i;
bestp=0;
printf(\"请输入背包最大容量:\\n\");
scanf(\"%d\",&c);
printf(\"请输入物品个数:\\n\");
scanf(\"%d\",&n);
printf(\"请依次输入物品的重量:\\n\");
for(i=1;i<=n;i++)
scanf(\"%d\",&w[i]);
printf(\"请依次输入物品的价值:\\n\");
for(i=1;i<=n;i++)
scanf(\"%d\",&p[i]);
Backtrack(1,0,0);
printf(\"最大价值为:\\n\");
printf(\"%d\\n\",bestp);
printf(\"被选中的物品依次是(0表示未选中,1表示选中)\\n\");
for(i=1;i<=n;i++)
printf(\"%d \",bestx[i]);
printf(\"\\n\");
return 0;
}
继续阅读与本文标签相同的文章
-
韩国公布500亿美元计划 大力发展电动和自动驾驶汽车
2026-05-18栏目: 教程
-
原来这样做可以提高自媒体短视频的播放量?
2026-05-18栏目: 教程
-
用了3年以上的iPhone手机,应该这样清理手机缓存,很实用
2026-05-18栏目: 教程
-
一文弄懂,锁的基本概念到Redis分布式锁实现
2026-05-18栏目: 教程
-
阿里云混合云备份如何还原虚拟机备份?
2026-05-18栏目: 教程
