0/1背包问题
来源:互联网 发布:淘宝床上用品货源 编辑:程序博客网 时间:2024/06/06 03:38
题目
有N件物品和一个容量为V的背包。第i件物品的重量是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的重量总和不超过背包容量,且价值总和最大。
蛮力法:
#include<stdio.h>#define N 10void main(){ int w[]={7,3,4,5}; int v[]={42,12,40,25}; int i,j,k; int ii,jj,kk; int vsum=0,wsum=0,Vmax=0,Wm=0; for(i=0;i<4;i++)for(j=0;j<4;j++) if(i<=j) {vsum=wsum=0;for(k=i;k<=j;k++){ wsum+=w[k]; vsum+=v[k];}printf("总量:%d,价值:%d ;子集:",wsum,vsum);for(kk=i;kk<=j;kk++) printf("%d ",kk+1);printf("\n");if(wsum<=10 && Vmax <=vsum){ Vmax=vsum; Wm=wsum; ii=i; jj=j;} } int a=0; for(a=ii;a<=jj;a++)printf("物品%d ",a+1); printf(" \n总重量:%d,总价值:%d \n",Wm,Vmax);}
动态规划法:
#include<stdio.h>#define C 10#define N 5int KnapSack(int,int w[],int v[]);int max(int a,int b);void main(){int w[]={2,2,6,5,4};int v[]={6,3,5,4,6};int num=KnapSack(N,w,v);printf("最优解:%d \n",num);}int KnapSack( int n, int w[],int v[]){int V[n+1][C+1];int x[n];int i,j;int a,b;int sum=0;for(i=0;i<=n;i++)V[i][0]=0;for(j=0;j<=C;j++)V[0][j]=0;for(i=1;i<=n;i++)for(j=1;j<=C;j++){if(w[i-1]>j){V[i][j]=V[i-1][j];}else{a=V[i-1][j];b=V[i-1][j-w[i-1]]+v[i-1];V[i][j]=max(a,b);}printf("v[%d][%d]=%d \n",i,j,V[i][j]);}j=C;for(i=n;i>0;i--){if(V[i][j]>V[i-1][j]){x[i]=1;j=j-w[i-1];printf("x[%d]= %d\n",i,x[i]);}else{x[i]=0;printf("x[%d]=%d \n",i,x[i]);}}return V[n][C];}int max(int a,int b){ if (a>=b) return a; else return b;}
- 背包问题(0-1背包、完全背包、多重背包)详解
- 背包问题和0-1背包问题
- 背包问题和0-1背包问题
- 背包问题系列--"0-1背包问题"
- 背包笔记-含0/1背包问题、完全背包问题、多重背包问题、二维背包问题、分组背包问题
- 【背包问题】背包问题之0-1背包、完全背包、多重背包
- 0-1背包问题
- 0/1背包问题
- 0,1背包问题
- 0-1背包问题
- 0/1背包问题
- 0-1背包问题
- // 0-1背包问题
- 0/1背包问题
- 0-1背包问题
- 0-1背包问题
- 0-1背包问题
- 0/1背包问题
- 分享一个分析的rtsp流媒体的问题
- 【设计模式】抽象工厂模式
- 磁盘分区简介
- JSP 弹出对话框的方式总结
- linux常用命令(待补充)
- 0/1背包问题
- 理解递归
- 简单的debugview
- const与重载函数
- libcurl发送邮件C++类
- c语言学习笔记二十一
- 基于Flex-config.xml的命令行编译(转)
- linux下samba搭建和网络驱动器
- R cannot be resolved to a variable