nyoj-1058部分和问题dfs

codinRay codinRay     2022-08-22     200

关键词:

部分和问题

时间限制:1000 ms  |  内存限制:65535 KB
难度:2
 
描述
给定整数a1、a2、.......an,判断是否可以从中选出若干数,使它们的和恰好为K。
 
输入
首先,n和k,n表示数的个数,k表示数的和。
接着一行n个数。
(1<=n<=20,保证不超int范围)
输出
如果和恰好可以为k,输出“YES”,并按输入顺序依次输出是由哪几个数的和组成,否则“NO”
样例输入
4 13
1 2 4 7
样例输出
YES
2 4 7


代码:
#include <iostream>
using namespace std;
int n, tar, val[20],sum;
bool flag, vis[20];
void ans() {
    cout << "YES" << 
;
    for (int i = 0; i < n; i++) {
        if (vis[i])
            cout << val[i] <<  ;
    }
    cout << endl;
}
void dfs(int pos) {
    if (sum > tar)
        return;
    if (sum == tar) {
        if (flag)
            return;
        flag = true;
        ans();
        return;
    }
    for (int i = pos; i < n; i++) {
        sum += val[i];
        vis[i] = true;
        dfs(i + 1);
        sum -= val[i];
        vis[i] = false;
    }
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(false);
    while (cin >> n >> tar) {
        sum = 0;
        flag = false;
        for (int i = 0; i < n; i++) {
            cin >> val[i];
            vis[i] = false;
        }
        dfs(0);
        if (!flag) {
            cout << "NO" << endl;
        }
    }
    return 0;
}

部分和问题(dfs)

来源:《挑战程序设计竞赛》题目描述:给定整数n个,判断是否能从中选出若干数,使它们的和恰好为k。输入n,k,array[0~n-1];输出Yes或者No。 思路:从a1开始按顺序决定每个数加还是不加,在全部n个数都决定后在判断它们... 查看详情

部分和问题南阳acm1058(递归+dfs)(代码片段)

部分和问题时间限制:1000ms | 内存限制:65535KB难度:2 描述给定整数a1、a2、.......an,判断是否可以从中选出若干数,使它们的和恰好为K。 输入首先,n和k,n表示数的个数,k表示数的和。接着一行n个数。(1<=n&... 查看详情

子集或者dfs部分和问题(代码片段)

...il.ArrayList;2importjava.util.Arrays;3importjava.util.Scanner;45publicclass部分和67privatestaticintkk;89publicstaticvoidmain(String[]args)10Scannersc=newScanner(System.in);11intn=sc.nextInt();12int[]A=newint[n];13for(inti=0;i<n;i++)14A[i]=sc.nextInt();1516intk=sc.nextInt();//131718System.out.p... 查看详情

部分和问题---多重部分和问题---动态规划(代码片段)

一:部分和问题给定整数a1、a2、.......an,判断是否可以从中选出若干数,使它们的和恰好为K。输入:n=4a=1,2,4,7k=13输出:Yes(13=2+4+7)书中带来是DFS搜索,相对比较简单代码:#include<bits/stdc++.h>usingnamespacestd;intn=4;inta[]=1,2,4,7;i... 查看详情

dfs

...现二、例题例一         部分和问题:给定整数a1、a2、…、an,判断是否可以从中选出若干数,使它们的和恰好为k限制条件 1≤n≤20 108≤ai& 查看详情

部分和问题(简单版)(代码片段)

正式开始学习dfs的用法,突然发现以前不能做的问题原来是深度优先问题;练手题很简单,大概意思就是在就是一系列数中是否能找出几个数相加,使结果等于一个给定的数1#include<iostream>2#include<string>3usingnamespacestd;4inta... 查看详情

《挑战程序竞赛》2.1.4部分和问题

题意:给定整数a1,a2,a3,...,an,判断是否可以从中选出若干数,使它们的和恰好为k。 解法:利用dfs深度优先遍历,从a1开始按顺序决定每个数是加还是不加。 code:1#include<iostream>2#include<algorithm>3usingnamespacestd;45#defi... 查看详情

luogu1019单词接龙dfs细节

...“龙”中出现两次),在两个单词相连时,其重合部分合为一部分,例如beast和astonish,如果接成一条龙则变为beastonish,另外相邻的两部分不能存在包含关系,例如at和 查看详情

p2819图的m着色问题(dfs)(代码片段)

...。  实现分步:DFS函数,check判断函数  一,DFS函数部分,确定了整个回溯的顺序吧。因为毕竟是一个点一个点按大小顺序进行深入的。对该层的点x上色,通过check()判断与比它小的相邻点颜色不同就进入下一层,否则从新... 查看详情

洛谷p1019单词接龙label:dfs

...“龙”中出现两次),在两个单词相连时,其重合部分合为一部分,例如beast和astonish,如果接成一条龙则变为beastonish,另外相邻的两部分不能存在包含关系,例如at和atide间不能相 查看详情

部分和问题(代码片段)

题目描述:给定整数a1,a2....an,判断是否可以从中选出若干数,使它们的和恰好为k.限制条件1≤n≤20-10^8≤ai≤10^8 -10^8≤k≤10^8样例1输入:n=4a=1,2,4,7k=13输出Yes样例2输入:n=4a=1,2,4,7k=15输出No分析:从a1开始按顺序决定每个数... 查看详情

bfs和dfs

BFSandDFS一般来说,能用DFS解决的问题,都能用BFS。DFS容易爆栈,而BFS可以自己控制队列的长度。深度优先一般是解决连通性问题,而广度优先一般是解决最短路径问题。  广优的话,占内存多,能找到最优解,必须遍历所... 查看详情

C++中图的BFS和DFS

...题】:BFSandDFSofagraphinC++【发布时间】:2014-12-1200:08:07【问题描述】:我一直在尝试对我的图表进行BFS和DFS。我已经尝试了一切,但仍然无法弄清楚我的算法有什么问题。请帮我解决这个问题。我将顶点与我的向量一起发送到bfs... 查看详情

codeforces767c.garland(dfs)

...em/767/C题意:一棵树,每个节点有一个权值t,把它分成三部分,每部分要求权值和相等。思路:由于子树的子树里再出现等于sum/3的情况,那么dp[u]=0,就可以很好的避免计算情况了dfs 第一找出来一个sum/3,然后子树结果清... 查看详情

dfs(洛谷1019单词接龙noip2000提高组第三题)

...“龙”中出现两次),在两个单词相连时,其重合部分合为一部分,例如beast和astonish,如果接成一条龙则变为beastonish,另外相邻的两部分不能存在包含关系,例如at和atide间不能相连。输入 查看详情

dfs故障诊断及排错

...时候经常会遇到这样那样的问题,导致DFS复制效果不佳,部分文件无法同步复制,下面就列举2个常见的问题并说明一下解决方法。1.DFS报错出现共享冲突,无法进行正常复制首先我们通过自带的诊断报告,导出诊断的结果,我们... 查看详情

洛谷p1019——单词接龙(dfs暴力搜索)

...最多在“龙”中出现两次),在两个单词相连时,其重合部分合为一部分,例如beast和astonish,如果接成一条龙则变为beastonish,另外相邻的两部分 查看详情

BFS 和 DFS 复杂性

...标题】:BFSandDFScomplexity【发布时间】:2022-01-0521:42:02【问题描述】:我不明白BFS和DFS的这些复杂性对于BFS,它写的时间复杂度是(d是树中解决方案节点的深度,b是节点儿子的最大数量)空间复杂度写成对于DFS时间复杂度是(m... 查看详情