#include<iostream> #include<cmath> #include<vector> #include<cstring> using namespace std; int main() { int n; cin>>n; int a[40]; long long num=(long long)n*(n+1)/2; if(num%2!=0) { cout<<"0"<<endl; return 0; } else { long long m=num/2; long long dp[45][5000]; memset(dp,0,sizeof(dp)); dp[0][0]=1; for(int i=1;i<=n;i++) for(int j=0;j<=m;j++) { if(j>=i) dp[i][j]=dp[i-1][j]+dp[i-1][j-i]; else dp[i][j]=dp[i-1][j]; } cout<<dp[n][m]/2<<endl; } return 0; }
要注意数组的大小和long long !!!,用多个例子试一试。
原文:https://www.cnblogs.com/h694879357/p/12663987.html