题目链接:http://acm.ocrosoft.com/problem.php?cid=1172&pid=18
题目描述
有n个数字,a[1],a[2],a[3]......a[n],以及一个数字m。
问n个数字中取出一些数字,这些数字的和能否等于m。
输入
多组测试数据,读入到文件尾结束。
第一行输入n,m。(1<=n<=20, 1<=m<=100)
第二行输入n个数字a[1],a[2],a[3]......a[n]。(1<=a[i]<=100)
输出
如果可以,输出YES,否则输出NO。
样例输入
5 5
1 1 1 1 1
5 5
2 2 2 2 2
样例输出
YES
NO
#include<bits/stdc++.h>
using namespace std;
int a[111];
int n,m;
bool flag=1;
void dfs(int s,int x){
if(x>=n){
if(s==m){
flag=0;
return;
}else{
return;
}
}
dfs(s+a[x],x+1);
dfs(s,x+1);
}
int main(){
while(cin>>n>>m){
flag=1;
for(int i=0;i<n;i++){
cin>>a[i];
}
dfs(0,0);
if(flag==0){
cout<<"YES"<<endl;
}else{
cout<<"NO"<<endl;
}
}
return 0;
}