NYOJ 1058 部分和问题 【DFS】

部分和问题

时间限制: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 <stdio.h>
int n, k, ok, arr[22], vis[22], count;

void DFS(int pos){
	if(count >= k){
		if(count == k){
			if(!ok){
				ok = 1; printf("YES\n");
			}
			for(int i = 0; i < n; ++i)
				if(vis[i]) printf("%d ", arr[i]);
			printf("\n");
		}
		return;
	}

	for(int i = pos; i < n; ++i){
		count += arr[i];
		vis[i] = 1;
		DFS(i + 1);
		count -= arr[i];
		vis[i] = 0;
	}
}

int main(){
	while(scanf("%d%d", &n, &k) == 2){
		ok = 0;
		for(int i = 0; i < n; ++i){
			scanf("%d", arr + i);
			vis[i] = 0;
		}
		count = 0; DFS(0);
		if(!ok) printf("NO\n");
	}
	return 0;
}

NYOJ 1058 部分和问题 【DFS】

时间: 2024-11-08 21:57:34

NYOJ 1058 部分和问题 【DFS】的相关文章

NYOJ 1058 部分和问题(经典题目dfs)

部分和问题 描述 给定整数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 题目分析: 这是一道经典的dfs问题,好多公司也用它做过面试题,我们定义函数dfs

nyoj 1058部分和问题(DFS)

部分和问题 时间限制: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<cstdio>

nyoj 1058部分和问题

部分和问题 时间限制: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 #in

NYOJ 587 blockhouses 【DFS】

blockhouses 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 Suppose that we have a square city with straight streets. A map of a city is a square board with n rows and n columns, each representing a street or a piece of wall. A blockhouse is a small castle th

NYOJ 722 数独 【DFS】+【预处理】

数独 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 数独是一种运用纸.笔进行演算的逻辑游戏.玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行.每一列.每一个3*3宫内的数字均含1-9,不重复. 每一道合格的数独谜题都有且仅有唯一答案,推理方法也以此为基础,任何无解或多解的题目都是不合格的. 有一天hrdv碰到了一道号称是世界上最难的数独的题目,作为一名合格的程序员,哪能随随便便向困难低头,于是他决定编个程序来解决它.. 输入 第一行有一个

nyist oj 1058 部分和问题 (DFS搜索)

部分和问题 时间限制: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 来

NYOJ之题目1058部分和问题

---------------------------------------- 简单搜索+剪枝 因为考虑到可能会有多个解,所以是将中间过程保存最后才一起打印出来的 AC代码: 1: 2: import java.util.ArrayList; 3: import java.util.List; 4: import java.util.Scanner; 5: 6: public class Main { 7: 8: public static void main(String[] args) {

acdream 1726 A Math game (部分和问题 DFS剪枝)

A Math game Time Limit: 2000/1000MS (Java/Others) Memory Limit: 256000/128000KB (Java/Others) Problem Description Recently, Losanto find an interesting Math game. The rule is simple: Tell you a numberH, and you can choose some numbers from a set {a[1

部分和问题(dfs)

部分和问题 时间限制: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  题解:这题用动态规划应