蛮力法、动态规划法、回溯法和分支限界法求解(4)

时间:2026-01-13   来源:未知    
字号:

if(j<a[i-1].w) V[i][j]=V[i-1][j]; else V[i][j]=max(V[i-1][j],V[i-1][j-a[i-1].w]+a[i-1].p); j=C; //求装入背包的物品 for (i=n;i>0;i--) { if (V[i][j]>V[i-1][j]){ x[i-1]=1; j=j-a[i-1].w; x[i-1]=0; } else } return V[n][C]; //返回背包取得的最大价值

}

int main()

{

goods b[N];

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

scanf("%d",&n); //输入物品种数 printf("背包容量C: "); scanf("%d",&C); //输入背包容量 for (int i=0;i<n;i++) //输入物品i的重量w及其价值v { printf("物品%d的重量w[%d]及其价值v[%d]: ",i+1,i+1,i+1); scanf("%d%d",&a[i].w,&a[i].p); b[i]=a[i];

}

int sum2=KnapSack2(n,a,C,X);//调用动态规划法求0/1背包问题

printf("动态规划法求解0/1背包问题:\nX=[ ");

for(i=0;i<n;i++) cout<<X[i]<<" ";//输出所求X[n]矩阵 printf("] 装入总价值%d\n",sum2); for (i=0;i<n;i++) { a[i]=b[i]; }//恢复a[N]顺序

}

3)复杂度分析:

动态规划法求解0/1背包问题的时间复杂度为:T(n) O(n C)。

3.回溯法求解0/1背包问题:

1)基本思想:

回溯法:为了避免生成那些不可能产生最佳解的问题状态,要不断

蛮力法、动态规划法、回溯法和分支限界法求解(4).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:19 元/月 原价:99元
低至 0.1 元/份 每月下载300
全站内容免费自由复制
VIP包月下载
特价:19 元/月 原价:99元
低至 0.1 元/份 每月下载300
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)