给你一组数 1 ~ N,问你能有几种分法,把他们分成2组,2组的和相等。
如果 sum(1 ~ n) 为奇数,直接输出0,负责的话 主要找到 和为 sum / 2的组数 再除以2就是结果
因为N 最大为39 如果单向搜索肯定超时,改成双向的就行了
/*
ID: 18906421
LANG: C++
PROG: subset
*/
#include<cstdio>
#include<cstring>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long LL;
const int maxn = 40;
const int maxd = 1500;
LL num[maxn],sum = 0,cnt = 0;
int n;
LL vis[maxd] = {0};
void dfs1(int pos,int num,int s){
if(s <= sum)
vis[s]++;
else
return;
for(int i = pos; i <= num; i++)
dfs1(i + 1,num,s + i);
return;
}
void dfs2(int pos,int num,int s){
if(s <= sum){
int e = sum - s;
if(vis[e]) cnt += vis[e];
}
else
return;
for(int i = pos; i <= num; i++)