1 solutions
-
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
Information
- ID
- 16560
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By