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
01.#include<iostream>02.#include<cstring>03.#include<cstdio>04.usingnamespacestd;05.intn,k,v,sum,a[25],b[25];06.voiddfs(intp)07.{08.if(sum>=k)09.{10.if(sum==k)11.{12.if(!v)13.{14.v=1;15.cout<<"YES"<<endl;16.}17.for(inti=0;i<n;i++)18.if(b[i])19.cout<<a[i]<<" ";20.cout<<endl;21.}22.return;23.}24.for(inti=p;i<n;i++)25.{26.sum+=a[i];27.b[i]=1;28.dfs(i+1);29.sum-=a[i];30.b[i]=0;31.}32.}33.intmain()34.{35.while(scanf("%d%d",&n,&k)==2)36.{37.v=0;38.memset(b,0,sizeof(b));39.for(inti=0;i<n;i++)40.cin>>a[i];41.sum=0;42.dfs(0);43.if(!v)44.cout<<"NO"<<endl;45.}46.return0;47.}
浙公网安备 33010602011771号