传送门
分析:
n个砝码,对于每一个砝码,有三种状态:加、减、不变;后面的状态由前面的推出;经典01背包问题
#include <bits/stdc++.h>
using namespace std;
const int N=105,M=100005;
int a[N];
bool f[N][M<<1];
int main()
{
int n, s=0;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
s+=a[i];
}
f[0][M]=1;
for(int i=1;i<=n;i++)
{
for(int j=-s;j<=s;j++)
{
f[i][j+M] |= f[i-1][j+M];
if(j-a[i]>=-s) f[i][j+M] |= f[i-1][j+M-a[i]];
if(j+a[i]<=s) f[i][j+M] |= f[i-1][j+M+a[i]];
}
}
int ans=0;
for(int i=1;i<=s;i++)
{
if(f[n][i+M]) ans++;
}
cout<<ans<<endl;
return 0;
}