给定正整数N,求将整数集合{k | 1<=k<=N且k为整数}划分为和相同的两个子集和的方式

eg:{1,2,3} 划分方式有一种{1,2},{3}

方法同Leetcode-494 TargetSum

dp:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;

int SubsetSum(int num[],int len,int s)  //在num[]中找所有可以加和=s的所有情况
{
    int n;
    int dp[s+1];
    memset(dp,0,sizeof(dp));
    dp[0]=1;
    for(int j=0;j<len;++j)  //枚举num中的所有元素
    {
        n=num[j];
        for(int i=s;i>=n;--i)
        {
            dp[i]=dp[i]+dp[i-n];  //dp[i-n]+n=i
        }
    }
    return dp[s];
}
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
         int num[n+1];
         int sum=0;
         int k=0;
        for(int i=1; i<=n; ++i)
        {
            num[k++]=i;
            sum+=i;
        }

    if(sum%2!=0)
    {
        printf("0\n");
    }
    else
    {
        sum=sum/2;
        printf("%d\n",SubsetSum(num,n,sum)/2);
    }

    }
    return 0;
}

 

相关文章:

  • 2021-11-01
  • 2021-05-12
  • 2022-12-23
  • 2022-01-21
  • 2021-07-22
  • 2022-12-23
  • 2021-11-02
  • 2021-11-22
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-02-12
  • 2021-06-24
  • 2022-12-23
  • 2021-09-07
  • 2022-01-10
相关资源
相似解决方案