zoukankan      html  css  js  c++  java
  • 求和问题(DFS)

    输入:

    n=4

    a={1,2,4,7}

    k=13

    输出:

    YES

    输入:

    n=4

    a={1,2,4,7}

    k=13

    输出:

    NO

    选出若干数,使它们的和恰好为k

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <math.h>
     4 #include <algorithm>
     5 #include <iostream>
     6 #include <ctype.h>
     7 #include <iomanip>
     8 #include <queue>
     9 #include <stdlib.h>
    10 using namespace std;
    11  
    12 int a[55];
    13 int n,k;
    14 //已经从前i项得到了和sum,然后对于i项之后的进行分支
    15 bool dfs(int i,int sum)
    16 {
    17     //如果前n项都计算过了,则返回sum是否与k相等
    18     if(i==n)  return sum==k;
    19     //不加a[i]的情况
    20     if(dfs(i+1,sum))  return true;
    21     //加上a[i]的情况
    22     if(dfs(i+1,sum+a[i]))  return true;
    23     //无论是否加上a[i]都不能凑成k就返回false
    24     return false;
    25 }
    26 
    27 void solve()
    28 {
    29     if(dfs(0,0)) printf("YES
    ");
    30     else   printf("NO
    ");
    31 }
    32 
    33 int main()
    34 {
    35     cin>>n;
    36     for(int i=0;i<n;i++){
    37         cin>>a[i];
    38     }
    39     cin>>k;
    40     solve();
    41 }

    <<挑战程序设计竞赛>>读后感

  • 相关阅读:
    NOIP 模拟 序列操作
    LUOGU 1525 关押罪犯
    HDU2473 Junk-Mail Filter
    BZOJ 2096 Pilots
    luogu 3939 数颜色
    NOIP模拟 赌博游戏
    Unity3D
    HTML5
    Cocos2d-x——支持多触点
    Cocos2d-x——Cocos2d-x 屏幕适配总结
  • 原文地址:https://www.cnblogs.com/wangmengmeng/p/5222707.html
Copyright © 2011-2022 走看看