标签:std bsp pre nbsp 代码 class int for void
给定整数a1,a2,...,an。判断是否可以从中选出若干数,使它们的和恰好为k。(来自挑战程序设计竞赛ch02p30)
1 #include <iostream> 2 3 bool dfs(int ,int ,int ,int,int[]); 4 void solve(int,int,int[]); 5 int main() { 6 using namespace std; 7 8 int num,sum=0; 9 //输入输出 10 cin >> num; 11 int sta[num]; 12 int b = 0; 13 for(int a = 0;a < num;a++){ 14 cin >> b; 15 sta[a] = b; 16 } 17 18 int k; 19 cin >> k; 20 //搜索 21 solve(num,k,sta); 22 return 0; 23 } 24 //已经从前i项得到了和sum,然后对于i项之后的进行分支 25 bool dfs(int i, int sum, int num, int k, int sta[]){ 26 27 //如果前n项都计算过了,则返回sum是否和k相等 28 if(i == num ) return sum == k; 29 30 //不加上a[i]的情况 31 if(dfs(i+1,sum,num,k,sta)) return true; 32 33 //加上a[i]的情况 34 if(dfs(i+1,sum+sta[i],num,k,sta) )return true; 35 36 //无论加不加a[i]都不能凑成k就返回false 37 return false; 38 } 39 void solve(int num, int k,int sta[]) { 40 if (dfs(0, 0, num ,k,sta)) printf("Yes\n"); 41 else printf("No\n");
c与c++混着用。。。其实是书里用的是c而我只会c++。
输入例
4
1 2 4 7
13
输出
Yes
标签:std bsp pre nbsp 代码 class int for void
原文地址:https://www.cnblogs.com/VanitasNote/p/11229511.html