Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 3004 Accepted Submission(s): 1687
const int maxn = 40; int dp[maxn][5]; void init() { dp[0][0] = dp[0][2] = 1; dp[0][1] = 0; dp[1][0] = dp[1][2] = 0; dp[1][1] = 1; for (int i = 2; i <= 30; i ++) { dp[i][0] = dp[i-2][0] + dp[i-1][1] + dp[i-2][2]; dp[i][1] = dp[i-1][2]; dp[i][2] = dp[i-1][1] + dp[i][0]; } } int main() { int n; init(); while (~scanf("%d", &n)) { if (n == -1) break; printf("%d\n", dp[n][0]); } return 0; }
Discuss里的代码:
const int MAX=31; int s[MAX]; int main() { int i,n; s[0]=1; s[2]=3; for(i=4;i<MAX;i+=2) { s[i]=4*s[i-2]-s[i-4]; } while(cin>>n,n>=0) { if(n&1) cout<<0<<endl; else cout<<s[n]<<endl; } return 0; }
原文:http://www.cnblogs.com/LinKArftc/p/4965072.html