网上找不到的一道题求帮忙看看哪错了?或思路?
(话说这还是我刚学不久的附加题,现在还不会做)
抽签
Description
你的朋友提议玩一游戏:将写有数字的n个纸片放入口袋中,你可以从口袋中抽取4次纸片,每次记下纸片上的数字后都将其放回口袋中。如果这4个数字的和是m,就是你赢,否则就是你的朋友赢。你挑战了好几回,结果一次也没有赢过,于是怒而撕破口袋,取出所有纸片,检查自己是否真的有赢的可能性。
请你编写一个程序,判断当纸片上所写的数字是k1,k2,……,kn时,是否存在抽取4次和为m的方案。如果存在,输出YES; 否则,输出NO。
限制条件:
1<=n<=50
1<=m<=108
1<=ki<=108
Input
第一行为n,m,中间用一空格隔开;
接下来的第二行为n个整数k1,k2,……,kn,中间用一空格隔开。
Output
一行,输出YES或NO。
Sample Input
[输入样例1]
3 10
1 3 5
[输入样例2]
3 9
1 3 5
Sample Output
[输出样例1]
YES
[输出样例2]
NO
#include<bits/stdc++.h>
using namespace std;
int want,sum,n;
bool fp,fw;
int a[11451];
void dfs(int tim,int s)
{
if(fp) return;
if(tim>4)
{
if(s>=sum)
{
if(s==sum) fp=1;
//else fw=1;
return;
}
}
for(int i=1;i<=n;i++)
{
//if(fw) break;
dfs(tim+1,s+a[i]);
}
//fw=0;
}
int main()
{
cin>>n>>want;
for(int i=1;i<=n;i++) cin>>a[i];
dfs(1,0);
if(fp)
{
cout<<"YES";
return 0;
}
cout<<"NO";
return 0;
}