部分和问题
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
2
-
描述
- 给定整数a1、a2、.......an,判断是否可以从中选出若干数,使它们的和恰好为K。
#include<stdio.h>
#include<string.h>
int n,k;
int count;
int map[22];
bool vis[22];
int suss;//用来标记是否成功
void dfs(int pos)//pos代表第几个数为位置
{
int i;
if(count>=k)
{
if(count==k)
{
printf("YES\n");
suss=1;//在此处标记已经成功
for(i=1;i<=n;i++)
{
if(vis[i])
printf("%d ",map[i]);
}
printf("\n");
}
}
for(i=pos;i<=n;i++)
{
count+=map[i];//先试着将这个数加上去
vis[i]=true;
dfs(i+1);
count-=map[i];//不满足情况时就去掉
vis[i]=false;
}
}
int main()
{
int i;
memset(map,0,sizeof(map));
memset(vis,false,sizeof(vis));
while(scanf("%d%d",&n,&k)!=EOF)
{
suss=0;
for(i=1;i<=n;i++)
scanf("%d",&map[i]);
count=0;
dfs(1);
if(suss==0)
printf("NO\n");
}
return 0;
}