购物券dfs剪枝
陈子骏
2018-04-02 17:40:12
```
#include<bits/stdc++.h>
using namespace std;
int m,n,a[41],vis[41];
int k;
void find(int now)
{
if(now==m){
k=1;return;
}
if(k==1)return;
for(int i=1;i<=n;i++)
{
if(now+a[i]>m) break;
if(vis[i]==0&&now+a[i]<=m)
{
vis[i]=1;
find(now+a[i]);
vis[i]=0;
}
}
}
int main()
{
while(scanf("%d%d",&n,&m)==2)
{
k=0;
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
sort(a+1,a+n+1);
find(0);
if(k==1) printf("YES\n");
else printf("NO\n");
}
}
```