学长专用来坑学弟的题,本来是不需要打印路径的。刚把题出出来就被我AC了,于是就把题目改了,然后我就...
/**
**author :Skylon **
╭︿︿︿╮
{/ A C /}
( (oo) )
︶︶︶
** **
** 题**
** 2014 年 月 日**
**/
#include <cmath>
#include <queue>
#include <stack>
#include <vector>
#include <cstdio>
#include <string>
#include <cctype>
#include <climits>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
int n,k,A[20];
stack<int>v;
int dfs(int i=0,int sum=0)
{
if (i==n)
return sum==k?1:0;
if (dfs(i+1,sum))
return 1;
if (dfs(i+1,A[i]+sum))
{
v.push(A[i]);//把栈改成队列,就会得到相反的输出顺序。为什么...
return 1;
}
}
int main()
{
while (~scanf("%d%d",&n,&k))
{
for (int i=0;i<n;i++)
scanf("%d",&A[i]);
if (dfs())
{
printf("YES\n");
while (!v.empty())
{
int x=v.top();
printf("%d ",x);
v.pop();
}
printf("\n");
}
else
printf("NO\n");
}
return 0;
}