简单背包问题

1、简单背包问题:

递归:

var flag bool
var W = make([]int,40)

func dfs(s int,n int)(bool){
	if s==0 {
		return true
	}
	if s<0 || (s>0 && n<1){
		return false
	}
	if dfs(s-W[n],n-1) {
		fmt.Print(W[n]," ")
		return true
	}
	return dfs(s,n-1)
}

//简单背包
func main(){
	var S,N int
	fmt.Scan(&S,&N)
	for i:=1;i<=N;i++ {
		fmt.Scan(&W[i])
	}
	if !dfs(S,N) {
		fmt.Println("Failed")
	}
}

枚举,二进制枚举所有情况,符合就输出。

var flag bool
var W = make([]int,40)

func main(){
	var N,i,j uint
	var S,sum,flag int
	fmt.Scan(&S,&N)
	for i=0;i<N;i++ {
		fmt.Scan(&W[i])
	}
	for i:=0;i<(1<<N);i++ {
		sum=0
		for j=0; j<N; j++ {
			if  i &(1 << j)!=0 {
				sum += W[j]
			}
		}
		if sum == S {
			fmt.Printf("%b",i)
			flag = 1
			break
		}
	}
	if flag == 0 {
		fmt.Println("failed")
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值