为什么这样写不对
#include<bits/stdc++.h>
using namespace std;
inline long long read(){
long long f=1,k=0;
char c=getchar();
while(c<'0' || c>'9'){
if(c=='-') f=-f;
c=getchar();
}
while(c>='0' and c<='9') k=k*10+c-'0',c=getchar();
return f*k;
}
inline void print(long long x){
if(x<0) putchar('-'),x=-x;
if(x<10) putchar(x+'0');
else print(x/10),putchar(x%10+'0');
}
long long n,m,x;
long long a[100010];
long long dp[100010];
int main(){
n=read();
for(int i=1;i<=n;i++){
a[i]=read();
}
m=read();
for(int i=1;i<=m;i++){
dp[read()]=-1;
}
x=read();
dp[0]=1;
for(int i=1;i<=n;i++){
for(int j=a[i];j<=x;j++){
if(dp[j]!=-1 and dp[j-a[i]]==1){
dp[j]=1;
}
}
}
if(dp[x]) puts("Yes");
else puts("No");
return 0;
}
这样写就过了
#include<bits/stdc++.h>
using namespace std;
inline long long read(){
long long f=1,k=0;
char c=getchar();
while(c<'0' || c>'9'){
if(c=='-') f=-f;
c=getchar();
}
while(c>='0' and c<='9') k=k*10+c-'0',c=getchar();
return f*k;
}
inline void print(long long x){
if(x<0) putchar('-'),x=-x;
if(x<10) putchar(x+'0');
else print(x/10),putchar(x%10+'0');
}
long long n,m,x;
long long a[100010];
long long dp[100010];
int main(){
n=read();
for(int i=1;i<=n;i++){
a[i]=read();
}
m=read();
for(int i=1;i<=m;i++){
dp[read()]=-1;
}
x=read();
dp[0]=1;
for(int i=0;i<=x;i++){
if(dp[i]==-1) continue;
for(int j=1;j<=n;j++){
if(i-a[j]>=0 and dp[i-a[j]]==1){
dp[i]=1;
}
}
}
if(dp[x]) puts("Yes");
else puts("No");
return 0;
}