搜索问题
利 用 了 动 态 规 划 思 想
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int f[1000];
void value(int n, int p){
int tar[n+1][p+1];
memset(tar,0,sizeof(tar));
for(int i=0; i<=n; ++i){
for(int j=0; j<=p; ++j){
if(i==0||j==0) tar[i][j]=0;
else{
if(f[i]<=j && tar[i-1][j-f[i]]+f[i]<=j){
tar[i][j]=max(tar[i-1][j], tar[i-1][j-f[i]]+f[i]);
}else{
tar[i][j]=tar[i-1][j];
}
}
}
}
if(tar[n][p]==p) cout<<"yes"<<endl;
else cout<<"no"<<endl;
}
int main(){
int n, m;
cin>>n;
for(int i=1; i<=n; ++i) cin>>f[i];
cin>>m;
for(int i=0; i<m; ++i){
int p;
cin>>p;
value(n, p);
}
}