您的位置:首页 > 其它

NYOJ 1058 部分和问题

2014-07-17 21:33 288 查看

[b]部分和问题[/b]

时间限制:1000ms|内存限制:65535KB
难度:2

[b]描述[/b]给定整数a1、a2、.......an,判断是否可以从中选出若干数,使它们的和恰好为K。

[b]输入[/b]首先,n和k,n表示数的个数,k表示数的和。
接着一行n个数。
(1<=n<=20,保证不超int范围)[b]输出[/b]如果和恰好可以为k,输出“YES”,并按输入顺序依次输出是由哪几个数的和组成,否则“NO”[b]样例输入[/b]
413
1247

[b]样例输出[/b]
YES
247

[b]来源[/b]经典题目[b]上传者[/b]TC_杨闯亮
解题:一顿乱搜。。。。。。


#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<climits>
#include<algorithm>
#include<cmath>
#defineLLlonglong
usingnamespacestd;
intn,d[21],ans[21],m,res;
booldfs(intcur,intadd,inttot){
if(cur>=n){
if(add==res){
m=tot;
returntrue;
}
returnfalse;
}
if(dfs(cur+1,add,tot)){
returntrue;
}
if(dfs(cur+1,add+d[cur],tot+1)){
ans[tot]=d[cur];
returntrue;
}
returnfalse;
}
intmain(){
while(~scanf("%d%d",&n,&res)){
inti;
for(inti=0;i<n;i++)
scanf("%d",d+i);
if(dfs(0,0,0)){
puts("YES");
for(i=0;i+1<m;i++)
printf("%d",ans[i]);
printf("%d\n",ans[i]);
}elseputs("NO");
}
return0;
}


ViewCode


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: