1. 程式人生 > >部分和問題(簡單版)

部分和問題(簡單版)

out 用法 main 個數 int n) 意思 OS AC

正式開始學習dfs的用法,突然發現以前不能做的問題原來是深度優先問題;

練手題很簡單,大概意思就是在就是一系列數中是否能找出幾個數相加,使結果等於一個給定的數

 1 #include<iostream>
 2 #include<string>
 3 using namespace std;
 4 int a[100] = { 1,2,4,7 }, n = 4, k=11;
 5 bool dfs(int i, int sum)
 6 {
 7     if (i == n) return sum == k;
 8     if (dfs(i + 1, sum)) return
true; 9 if (dfs(i + 1, sum+a[i])) return true; 10 return false; 11 } 12 void solve() 13 { 14 if (dfs(0, 0)) cout << "Yes" << endl; 15 else cout << "No" << endl; 16 } 17 int main() 18 { 19 solve(); 20 return 0; 21 }

循環結束的條件是i==n,即前n項都計算完成後,判斷是否等於sum,

改良升級版(規定幾個數相加,使的結果等於給定的一個數)

 1 #include<iostream>
 2 #include<string>
 3 using namespace std;
 4 int a[100] = { 1,2,4,7 }, n = 4, k=11;
 5 bool dfs(int i, int sum,int mark)
 6 {
 7     if (i == n&&mark==2) return sum == k;
 8     if (i == n && mark != 2) return false;
 9     if (dfs(i + 1, sum,mark)) return
true; 10 if (dfs(i + 1, sum+a[i],mark+1)) return true; 11 return false; 12 } 13 void solve() 14 { 15 if (dfs(0, 0,0)) cout << "Yes" << endl; 16 else cout << "No" << endl; 17 } 18 int main() 19 { 20 solve(); 21 return 0; 22 }

部分和問題(簡單版)