子集和問題
description
子集和問題的乙個例項為〈s,t〉。其中,s=是乙個正整數的集合,c是乙個正整數。子集和問題判定是否存在s的乙個子集s1,使得:
。試設計乙個解子集和問題的回溯法。
對於給定的正整數的集合s=和正整數c,計算s 的乙個子集s1,使得:
。input
輸入資料的第1 行有2 個正整數n 和c(n≤10000,c≤10000000),n 表示s 的大小,c是子集和的目標值。接下來的1 行中,有n個正整數,表示集合s中的元素。
output
將子集和問題的解輸出。當問題無解時,輸出「no solution!」。
sample
input
5 10
2 2 6 5 4
output
2 2 6
hint
#include
using namespace std;
int a[
100010];
int pre[
100010];
int vis[
100010];
int tot =0;
int f =0;
int n,c;
void
dfs(
int p,
int q)
else
if(vis[i]
)cout<<
" "
if(tot+pre[n]
-pre[p]
return
;//已經沒必要繼續
//go
if(totdfs(p+
1,n)
;//back
tot-
=a[p]
; vis[p]=0
;dfs
(p+1
,n);
}int
main()
if(pre[n]
dfs(
1,n)
;}
子集和問題 回溯
子集和問題的乙個例項為 s,t 其中,s 是乙個正整數的集合,c是乙個正整數。子集和問題判定是否存在s的乙個子集s1,使得 sum s1 c。試設計乙個解子集和問題的回溯法。對於給定的正整數的集合s 和正整數c,計算s 的乙個子集s1,使得 sum s1 c。輸入資料的第1 行有2 個正整數n 和c...
子集和問題(dfs)
題目資訊 問題描述 對於乙個給定正整數的集合s 和正整數c,程式設計計算s的乙個子集s1,使得子集s1的和等於c。輸入格式 第一行有2個正整數n和c,第二行有n個正整數 輸出格式 一行資料,按輸入的順序輸出,若無解則輸出 no solution 輸入樣例 5 10 2 2 6 5 4 輸出樣例 2 ...
回溯法 子集和問題
問題 給定n個正整數wi和乙個正整數m,在這n個正整數中找出乙個子集,使得子集中的正整數之和等於m。解的形式 設定乙個n元組 x0,x1,xn 1 如果wi包含在這個子集中,xi就等於1,反之等於0.boundfunction 演算法偽 package com.iteye.caoruntao.sum...