#include <iostream>
using namespace std;
const int N = 50;
long long v[N], f[2000];
signed main()
{
long long n;
cin >> n;
long long sum = n * (1 + n) / 2;
if (sum & 1)
{
cout << 0 << endl;
return 0;
}
sum /= 2;
f[0] = 1;
for (int i = 1; i <= n; i++)
v[i] = i;
for (int i = 1; i <= n; i++)
for (int j = sum; j >= v[i]; j--)
f[j] += f[j - v[i]];
cout << f[sum] / 2 << endl;
}
我是凭着感觉写的01背包方案数,但是输出的时候我发现方案数正好是标准答案的二倍,所以我输出的时候最后除了二,但是这样不知道为什么就过了...有人能解释一下吗