NYOJ1058
来源:互联网 发布:java语言 编辑:程序博客网 时间:2024/06/14 03:55
部分和问题
时间限制:1000 ms | 内存限制:65535 KB
难度:2
- 描述
- 给定整数a1、a2、.......an,判断是否可以从中选出若干数,使它们的和恰好为K。
- 输入
- 首先,n和k,n表示数的个数,k表示数的和。
接着一行n个数。
(1<=n<=20,保证不超int范围) - 输出
- 如果和恰好可以为k,输出“YES”,并按输入顺序依次输出是由哪几个数的和组成,否则“NO”
- 样例输入
4 131 2 4 7
- 样例输出
YES2 4 7
#include <stdio.h> int n, k, ok, arr[22], vis[22], count; //ok用来标记是否成功 void dfs(int pos){ //pos代表第几个数为位置 if(count >= k){ if(count == k){ ok = 1;//在此处标记已经成功 printf("YES\n"); for(int i = 0; i < n; ++i){ if(vis[i]) printf("%d ", arr[i]); } printf("\n"); } } 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; }
阅读全文
0 0
- NYOJ1058
- NYoj1058 java
- nyoj1058部分和问题
- nyoj1058 部分和问题
- nyoj1058 部分和问题
- nyoj1058 部分和问题
- NYOJ1058部分和问题
- NYOJ1058 部分和问题
- NYOJ1058 部分和问题
- nyoj1058 部分和问题
- [NYOJ1058]部分和问题
- nyoj1058 部分和问题 dfs
- 部分和问题 NYOJ1058 简单深搜
- nyoj1058部分和问题(DFS)
- NYOJ1058部分和问题(dfs)
- NYOJ1282 NYOJ1058 部分和问题(DFS)
- nyoj1058部分和问题(基于01背包的思想)
- 搜索学习(3)--NYOJ1058--部分和问题
- DHCP动态主机配置协议
- keras入门(一)
- 百度之星复赛--Arithmetic of Bomb----暴力
- 详细剖析浮点型运算的精度丢失
- Java 加解密中的对称加密详解
- NYOJ1058
- csu1840Lawn mower(水)
- GitHub命令的使用
- n&(n-1)的用法
- Maven的安装配置
- hdu2087-自己的理解&kmp讲解-剪花布条
- 【HDU1087】Super Jumping
- python windows下安装talib
- View那些事儿(1) -- View绘制的整体流程