Huawei 2014 机试题(续)

0-1背包问题求解
本文介绍了一个解决0-1背包问题的经典算法实现。通过递归的方式寻找能够组成目标重量(例如20)的物品组合,物品由一系列正整数组成(如1,3,5,7,8),并给出了一个具体的示例程序,该程序能够输出所有可能的组合方案。
//0-1背包
//给定一个数20,再给定几个数字1 3 5 7 8
//sample output 1 3 5 7 8
//              0 0 1 1 1 因为5+7+8=20
#include <stdio.h>
#include <string.h>
int a[50];
bool f[50] = {0};
int find(int w,int s){
if(w==0) return 1;
if(w<0 || w>0 && s==0) return 0;
if(find(w-a[s-1],s-1)){
f[s-1] = 1;
return 1;
}
return find(w,s-1);
}
int main(){
int n,m,i;
scanf("%d %d",&n,&m);
for(i=0;i<m;i++) 
scanf("%d",&a[i]);
if(find(n,m)){
for(i=0;i<m;i++)
printf("%d ",f[i]);
printf("\n");
}
else
printf("NO\n");
return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值