nyoj 1058 部分和問題 【dfs】
時間限制:
1000 ms | 記憶體限制:
65535 kb
難度:2 描述
給定整數a1、a2、.......an,判斷是否可以從中選出若干數,使它們的和恰好為k。
輸入
首先,n和k,n表示數的個數,k表示數的和。
接著一行n個數。
(1<=n<=20,保證不超int範圍)
輸出如果和恰好可以為k,輸出「yes」,並按輸入順序依次輸出是由哪幾個數的和組成,否則「no」
樣例輸入
4 131 2 4 7
樣例輸出
yes2 4 7
這裡簡單的dp 其實 最開始最想的是怎麼記錄這個資料是否已經被計算了。。。 於是採用乙個visit 陣列記錄 就可以將數字記錄下來
實現**:
#include#includeusing namespace std;
const int max_n = 1000;
int k , n;
int num ;
int a[max_n];
int visit[max_n];
bool dfs(int i , int sum)
//如果加上這個數和也k 那麼返回true
if(dfs(i+1, sum + a[i]))
return false;
}void solve()}}
else printf("no\n") ;
}int main()
solve();
}return 1;
}
nyoj1058 部分和問題
部分和問題 時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述給定整數a1 a2 an,判斷是否可以從中選出若干數,使它們的和恰好為k。輸入首先,n和k,n表示數的個數,k表示數的和。接著一行n個數。1 n 20,保證不超int範圍 輸出如果和恰好可以為k,輸出 yes 並按輸入...
nyoj 1058 部分和問題
時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述 給定整數a1 a2 an,判斷是否可以從中選出若干數,使它們的和恰好為k。輸入 首先,n和k,n表示數的個數,k表示數的和。接著一行n個數。1 n 20,保證不超int範圍 輸出如果和恰好可以為k,輸出 yes 並按輸入順序依次...
NYOJ 1058部分和問題
描述 給定整數a1 a2 an,判斷是否可以從中選出若干數,使它們的和恰好為k。輸入 首先,n和k,n表示數的個數,k表示數的和。接著一行n個數。1 n 20,保證不超int範圍 輸出如果和恰好可以為k,輸出 yes 並按輸入順序依次輸出是由哪幾個數的和組成,否則 no 樣例輸入 4 13 1 2 ...