蠻力法解決0_1背包問題新思路-——利用C語言位域類型


廢話不說了,直接上代碼

#include<stdio.h>
#include<math.h>
#define N 5  //物品種類數目
#define CAPACITY 6  //背包容量
#define COUNT  32
int weight[N]={3,2,1,4,5};
int value[N]={25,20,15,40,50};
union{
	unsigned char state;
	struct _FLAG{
	unsigned char good_1_flag:1;
	unsigned char good_2_flag:1;
	unsigned char good_3_flag:1;
	unsigned char good_4_flag:1;
	unsigned char good_5_flag:1;
	}flags;
}package;
int function()
{
	int sunw=0,sumv=0,maxValue=0;
	int totalWeight=0,totalValue=0,position,state;
	for(state=0;state<COUNT;state++)
	{
		package.state=state;
		totalWeight=package.flags.good_1_flag*weight[0]+package.flags.good_2_flag*weight[1]
			+package.flags.good_3_flag*weight[2]+package.flags.good_4_flag*weight[3]
			+package.flags.good_5_flag*weight[4];
		if(totalWeight<=CAPACITY)
		{
			totalValue=package.flags.good_1_flag*value[0]+package.flags.good_2_flag*value[1]
				+package.flags.good_3_flag*value[2]+package.flags.good_4_flag*value[3]
				+package.flags.good_5_flag*value[4];
			if(maxValue<totalValue)
			{
				maxValue=totalValue;
				position=state;
			}
		}
	}
	package.state=position;
	printf("maxValue=%d\ngood state:%d  %d   %d  %d  %d  \n",maxValue,package.flags.good_1_flag,
		package.flags.good_2_flag,package.flags.good_3_flag,package.flags.good_4_flag,package.flags.good_5_flag);
	return 0;
}

 運行結果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM