用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c代码库

背包问题(动态规划算法)

2012-10-30 作者: 程序猿style举报

[c]代码库

#include<stdio.h>

#include<stdlib.h>

#define LIMIT 8  // 重量限制 
#define N 5       // 物品种类 
#define MIN 1     // 最小重量 


/*背包问题是关于最佳化的问题,要解最佳化问题可以使用「动态规划」(Dynamic programming),从空集合开始,每增加一个元素就先求出该阶段的最佳解,直到所有的元素加入至集合中,最后得到的就是最佳解*/
struct body
{
	char name[20];
	int size;
	int price;
};

typedef struct body object;

int main ( void )
{
	int item[LIMIT+1]={0};
	int value[LIMIT+1]={0};
	int newvalue,i,s,p;

	object a[]={{"李子",4,4500},
		{"苹果",5,5700},
		{"橘子",2,2250},
		{"草莓",1,1100},
		{"甜瓜",6,6700}
	};

	for ( i=0; i<N; i++ )
	{
		for ( s=a[i].size; s<=LIMIT; s++ )
		{
			p=s-a[i].size;
			newvalue=value[p]+a[i].price;
			if ( newvalue>value[s] )  // 找到阶段最佳解
			{
				value[s]=newvalue;
				item[s]=i;
			}
		}
	}

	printf ( "物品\t价格\n" );
	for ( i=LIMIT; i>=MIN; i=i-a[item[i]].size )
	{
		printf ( "%s\t%d\n",
		         a[item[i]].name,a[item[i]].price );
	}

	printf ( "合计\t%d\n",value[LIMIT] );

	return 0;
}

[代码运行效果截图]


背包问题(动态规划算法)


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...