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")
}
}