zoukankan      html  css  js  c++  java
  • Challenge-2.1.4 部分和问题

    部分和问题

    描写叙述
    给定整数a1、a2、.......an。推断能否够从中选出若干数,使它们的和恰好为K。
    输入
    首先,输入n。表示数的个数。


    接着一行n个数。


    (1<=n<=20,保证不超int范围)

    下一行输入k,表示数的和

    输出
    假设和恰好能够为k,输出“YES”,并按输入顺序依次输出是由哪几个数的和组成。否则“NO”
    例子输入
    4 
    1 2 4 7
    13
    例子输出
    YES
    


    简单的dfs


    #include<iostream>
    using namespace std;
    #define MAX_N 30 
    int a[MAX_N];
    int n,k;


    bool dfs(int i,int sum)//已经从前i项得到了和sum,然后对于 i 项之后的进行分支 
    {
    if(i==n)return sum==k;//假设前n项都计算过了,则返回sum是否与k相等 
    if(dfs(i+1,sum))return true;//不加a[i] 
    if(dfs(i+1,sum+a[i]))return true;//加a[i] 
    return false;//是否加上a[i]都不能凑成k 



    int main()
    {
    cin>>n;
    for(int i=0;i<n;i++)
    {
    cin>>a[i];
    }
    cin>>k;
    if(dfs(0,0))
    cout<<"YES"<<endl;
    else 
    cout<<"NO"<<endl;
    return 0;
    }




  • 相关阅读:
    Docker
    Web
    爬虫
    Python
    软件脱壳
    网络抓包
    HTTPS单向认证,双向认证
    新版无完整背景图片滑块验证码
    Frida Hook
    闭包函数与装饰器
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/6755705.html
Copyright © 2011-2022 走看看