ural 1225. Flags

纠结啊。。。。贴道水题。

 

我推的公式,用排列组合,过后看下discuss,居然是斐波那契数列的二倍。。情何以堪!!!

 

#include <queue> #include <stack> #include <math.h> #include <stdio.h> #include <stdlib.h> #include <iostream> #include <limits.h> #include <string.h> #include <string> #include <algorithm> using namespace std; const int MAX = 50; long long dp[MAX]; long long c[MAX][MAX]; int main() { int n; fill(dp,dp+MAX,2); memset(c,0,sizeof(c)); for(int i=0; i<MAX; i++) { c[i][0] = 1; c[i][1] = i; } for(int i=1; i<MAX; i++) for(int k=1; k<=i; k++) c[i][k] = (c[i-1][k] + c[i-1][k-1]); for(int i=3; i<=45; i++) for(int k=i-2; k>=0; k-- ) { if( i-k-1 > k ) break; dp[i] += 2*c[k][i-k-1]; } scanf("%d",&n); printf("%lld/n",dp[n]); return 0; }  

你可能感兴趣的:(ural 1225. Flags)