首页 > 编程语言 > 详细

部分和问题(贪心算法--递归)

时间:2016-05-19 23:14:31      阅读:425      评论:0      收藏:0      [点我收藏+]

#include<stdio.h>

#define N 20

int a[N];

int n,k;

int dfs(int i, int sum);

int main() {

   int i;  

scanf("%d%d", &n,&k);    

for(i=0; i<n; i++){  

 scanf("%d", &a[i]);

 } 

 if(dfs(0, 0))  {

  printf("Yes\n");

 // printf("");  

}  

 else

  printf("No\n");

 return 0;

}// 已经从前i项得到了和sum,然后对于i项之后的进行分支

int dfs(int i, int sum) {

 // 如果前n项都计算过了,则返回sum是否与k相等   

if(i==n)   return sum==k;  // 不加上a[i]的情况 

 if(dfs(i+1, sum))  

 return 1; // 加上a[i]的情况 

 if(dfs(i+1, sum+a[i]))  

 return 1;  // 无论是否加上a[i]都不能凑成k就返回false

   return 0;

}

部分和问题(贪心算法--递归)

原文:http://www.cnblogs.com/CAOYR/p/5510255.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!