题目描述
题解
两次01背包
代码
#include<iostream>
using namespace std;
const int N = 2e5+5;
typedef long long LL;
int W[N];
int f[N];
int n;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;++i){
scanf("%d",W+i);
}
f[0]=1;
for(int i=1;i<=n;++i){
for(int j=1e5;j>=W[i];--j)if(f[j-W[i]])f[j]=1;
}
for(int i=1;i<=n;++i){
for(int j=0;j<=1e5;++j)if(f[j+W[i]])f[j]=1;
}
int ans=0;
for(int i=1;i<=1e5;++i)if(f[i])ans++;
printf("%d\n",ans);
return 0;
}