zoukankan      html  css  js  c++  java
  • 部分和问题(贪心算法--递归)

    #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 ");

     // printf("");  

    }  

     else

      printf("No ");

     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;

    }

  • 相关阅读:
    python安装
    实现node服务器
    VSCode集成tomcat及使用方法
    CommonJS规范
    Bootstrap 笔记
    vue笔记
    jgGrid模板添加
    vue组件中的data
    解析DNS
    StaticResource
  • 原文地址:https://www.cnblogs.com/CAOYR/p/5510255.html
Copyright © 2011-2022 走看看