AC代码,但是不知道为什么最后要这样
查看原帖
AC代码,但是不知道为什么最后要这样
833124
BIOS楼主2023/5/2 20:10
#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背包方案数,但是输出的时候我发现方案数正好是标准答案的二倍,所以我输出的时候最后除了二,但是这样不知道为什么就过了...有人能解释一下吗

2023/5/2 20:10
加载中...