c语言贪心算法背包问题,[算法]背包问题的经典算法和贪心算法解答,C语言实现...

/*背包问题之经典解法和贪心算法

*code cg

*2008 12 24

*调试环境TC ,devC++

*/

#include "stdio.h"

#include "stdlib.h"

#include "conio.h"

#define N 5 /*定义需要放的物件数量*/

#define PSIZE 150/*定义背包大小*/

long item[N]={15,40,50,60,90};/*初始化物件数组,贪心算法要求大小已排序*/

int freespace[N]={0};

int classic() {/*经典算法*/

long size = PSIZE;

long used = 0;

int i;

for(i = N - 1 ; i >= 0 ; i--){

if((size - used) >= item[i]){/*大小可以放入吗?*/

used += item[i]; /*放入背包 已使用数加新物件的大小*/

freespace[i] = 1;

}

else { /*大小太大*/

freespace[i] = 0;

}

}/*for*/

return 1;

}

int greedy(){/*贪婪算法*/

int i;

long size = PSIZE;

long used = 0;

for(i = N - 1 ; i >= 0 ; i--){/*先放大的物体,再考虑小的物体*/

if( (used + item[i]) < = size){/*如果当前物体可以放入*/

freespace[i] = 1;/*1表示放入*/

used += item[i];/*背包剩余容量减少*/

}

else{

freespace[i]=0;

}

}/*for*/

if(size == used)/*返回*/

return 1;

else

return 0;

}

void main()

{

int i;/*计数器*/

for(i = 0 ; i < N ; i++){

if(i % 5 == 0 )

printf("n");

printf("%10ld" , item[i]);/*首先输入原始数据*/

}/*for*/

printf("nClassicn");

if(classic()==1){/*经典算法*/

printf("Result:n");

for(i=0;i

if(freespace[i] == 1){

if(i % 5 == 0)

printf("n");

printf("%10ld" , item[i]);

}/*if*/

}/*for*/

}/*if*/

else {

printf("nNo Resultn");

}

for(i = 0 ; i < N ; i++)

freespace[i]=0 ; /*清空freespace数组*/

printf("nGreedyn");

if(classic()==1){/*经典算法*/

printf("Result:n");

for(i=0;i

if(freespace[i] == 1){

if(i % 5 == 0)

printf("n");

printf("%10ld" , item[i]);

}/*if*/

}/*for*/

}/*if*/

else{

printf("nNo Resultn");

}

system("PAUSE");

}

/*背包问题之经典解法和贪心算法

*code cg

*2008 12 24

*调试环境TC ,devC++

*/

#include "stdio.h"

#include "stdlib.h"

#include "conio.h"

#define N 5 /*定义需要放的物件数量*/

#define PSIZE 150/*定义背包大小*/

long item[N]={15,40,50,60,90};/*初始化物件数组,贪心算法要求大小已排序*/

int freespace[N]={0};

int classic() {/*经典算法*/

long size = PSIZE;

long used = 0;

int i;

for(i = N - 1 ; i >= 0 ; i--){

if((size - used) >= item[i]){/*大小可以放入吗?*/

used += item[i]; /*放入背包 已使用数加新物件的大小*/

freespace[i] = 1;

}

else { /*大小太大*/

freespace[i] = 0;

}

}/*for*/

return 1;

}

int greedy(){/*贪婪算法*/

int i;

long size = PSIZE;

long used = 0;

for(i = N - 1 ; i >= 0 ; i--){/*先放大的物体,再考虑小的物体*/

if( (used + item[i]) < = size){/*如果当前物体可以放入*/

freespace[i] = 1;/*1表示放入*/

used += item[i];/*背包剩余容量减少*/

}

else{

freespace[i]=0;

}

}/*for*/

if(size == used)/*返回*/

return 1;

else

return 0;

}

void main()

{

int i;/*计数器*/

for(i = 0 ; i < N ; i++){

if(i % 5 == 0 )

printf("n");

printf("%10ld" , item[i]);/*首先输入原始数据*/

}/*for*/

printf("nClassicn");

if(classic()==1){/*经典算法*/

printf("Result:n");

for(i=0;i

if(freespace[i] == 1){

if(i % 5 == 0)

printf("n");

printf("%10ld" , item[i]);

}/*if*/

}/*for*/

}/*if*/

else {

printf("nNo Resultn");

}

for(i = 0 ; i < N ; i++)

freespace[i]=0 ; /*清空freespace数组*/

printf("nGreedyn");

if(classic()==1){/*经典算法*/

printf("Result:n");

for(i=0;i

if(freespace[i] == 1){

if(i % 5 == 0)

printf("n");

printf("%10ld" , item[i]);

}/*if*/

}/*for*/

}/*if*/

else{

printf("nNo Resultn");

}

system("PAUSE");

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值