1 条题解
-
0
C++ :
#include<iostream> #include<malloc.h> using namespace std; long long dyn[1000]={0}; int main() { int n,s; while(scanf("%d",&n)!=EOF){ s=n*(n+1); if(s%4) { cout<<0<<endl; continue; } s/=4; int i,j; dyn[0]=1; for(i=1;i<=n;i++)//表示这个次选取的是数为i { for(j=s;j>=i;j--) dyn[j]+=dyn[j-i];//dyn[j-i]表示加起来等于j-i的组数, } //dyn[j]表示加起来等于j的组数 cout<<dyn[s]/2<<endl;//由于交换两个子集合的位置被认为是同一种划分方案,所以最终结果为dyn[s]/2 for(int i=1;i<=dyn[s]/2;i++) dyn[i]=0; } return 1; }
- 1
信息
- ID
- 284
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者