部分和问题(南阳oj1058)(DFS)
2014-11-05 14:11
323 查看
部分和问题
时间限制: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,a[30],visit[30],ans,ok;int dfs(int pos){ if(ans>=k) { if(ans==k) { if(!ok){ ok=1;printf("YES\n"); } for(int i=0;i<n;i++) if(visit[i]) printf("%d ",a[i]); printf("\n"); } return ok; } for(int i=pos;i<n;i++) { ans+=a[i]; visit[i]=1; dfs(i+1); ans-=a[i]; visit[i]=0; }}int main(){ while(scanf("%d %d",&n,&k)==2) { for(int i=0;i<n;i++) { scanf("%d",&a[i]); visit[i]=0; } ok=ans=0; dfs(0); if(!ok) printf("NO\n"); } return 0;}
相关文章推荐
- 【经典DFS】NYOJ-1058-部分和问题
- NYOJ 1058 部分和问题 (深搜DFS)
- NYOJ 1058 部分和问题(DFS ,经典题)
- [DFS] NYOJ-1058-部分和问题
- NYOJ 1058 部分和问题 【DFS】
- nyoj 1058 部分和问题 【简单DFS】
- nyoj1058部分和问题(简单基础易上手的dfs)
- NYOJ - 1058 - 部分和问题(DFS+减枝)
- nyist oj 1058 部分和问题 (DFS搜索)
- NYOJ1058. 部分和问题(基础DFS)
- nyoj 1058部分和问题(DFS)
- nyoj 1058 部分和问题 【DFS】
- 南阳 1058 部分和问题
- NYOJ 1058 部分和问题(DFS)
- NYOJ 1058--部分和问题【DFS】
- 1058 部分和问题【dfs+记录】
- NYOJ 1058 部分和问题 【DFS】
- NYOJ 1058 部分和问题(dfs)
- NYOJ1058 部分和问题(DFS)
- NYOJ--1058--dfs--部分和问题