数据确实水了。。数组没开到10^9也过了
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<set>
using namespace std;
int main(){
int n,k;
cin>>n>>k;
int a[30];
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
static int f[10000000];
for(int i=0;i<n;i++){
for(int j=k;j>=a[i];j--){
f[j]=max(f[j],f[j-a[i]]+a[i]);
}
}
printf("%s",f[k]==k?"Yes":"No");
return 0;
}
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<set>
using namespace std;
int n,k;
int a[30];
int flag=0;
void f(int index,int sum){
if(sum==k){
flag=1;
return ;
}
if(index>=n) return;
f(index+1,sum+a[index]);
f(index+1,sum);
}
int main(){
cin>>n>>k;
for(int i=0;i<n;i++) scanf("%d",&a[i]);
f(0,0);
if(flag) cout<<"Yes";
else cout<<"No";
return 0;
}