1、本题让我对DP的理解更深一层。。。原来我从未真正懂过DP。。。
2、本题是给出一些数,让将数划分为两个集合,使两个集合各自的数之和相等。刚开始我看数字只有39
/*
ID:mrxy564
PROG:subset
LANG:C++
*/
#include<cstdio>
using namespace std;
int n,all;
long long dp[800];
int main(){
freopen("subset.in","r",stdin);
freopen("subset.out","w",stdout);
scanf("%d",&n);
all=n*(n+1)/2;
if(all&1){
printf("0\n");
return 0;
}
else{
all/=2;
dp[0]=1;
for(int i=1;i<=n;i++)
for(int j=all;j>=i;j--)
dp[j]+=dp[j-i];
printf("%lld\n",dp[all]/2);
}
return 0;
}