枚举法解决一切 0--1背包问题

一.当3个物品数量,总背包为40时      每个物品重量 10 20 30    价值为  70 80 150 

 代码如下:

#include
#define n 3
possible_solution(int x[n]){
	int i;
	for(i=0;i<3;i++)
	  if(x[i]!=1) { x[i]=1;return;}
	  else   x[i]=0;
	  return;
}
int main(){
	int w[n]={10,20,30},v[n]={70,80,150};
	int x[n]={0,0,0},y[n]={0,0,0};
	int tw,tv,tv1=0,limit=40;
	int j;
	for(j=1;j<=8;j++){
		possible_solution(x);
		tw=x[0]*w[0]+x[1]*w[1]+x[2]*w[2];
		tv=x[0]*v[0]+x[1]*v[1]+x[2]*v[2];
		if(tw<=limit&&tv>tv1){
			tv1=tv; y[0]=x[0];y[1]=x[1];y[2]=x[2];
		}
	}
	printf("0-1背包问题的最优解 y=(%d,%d,%d)\n",y[0],y[1],y[2]);
	printf("总价值为:%d",tv1);
}

通过此代码过程,可以给出通用的枚举法解决所有背包问题

代码如下:

#include
#include
int n; 
int fun(int x[n]){
	int i;
	for(i=0;itv1){
			tv1=tv;    
			for(i=0;i

神来之笔:

int fun(int x[n]){
	int i;
	for(i=0;i

这个代码可以直接取每个商品的数量是0还是1,要是我写的话,可能用几个for循环遍历0和1吧。

你可能感兴趣的:(蓝桥杯)