返回题解分享
讨论 / 题解分享/ 帖子详情

[USACO 2.2.2] Subset Sums 集合 - 题解

#include<bits/stdc++.h>
using namespace std;
int n,f[40][1000],num;
int main()
{
    cin>>n;
    num=n*(n+1)/2;
    if(num%2!=0)
    {
        cout<<0;
        return 0;
    }
    f[1][0]=1;
    f[1][1]=1;//初始化无法再分解的
    for(int i=2;i<=n;i++)//1已经被初始化过了
    {
        for(int j=0;j<=num;j++)//j还是得从0开始枚举,因为初始化的是
        //f[1]的所有情况,并且后面每次枚举i的时候,j每种情况都要枚举一遍
        {
            if(j>i) f[i][j]=f[i-1][j]+f[i-1][j-i];
            else f[i][j]=f[i-1][j];
        }
    }
    cout<<f[n][num/2]<<endl;
    return 0;
}
0 回复 0 转发 0 喜欢 5 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!