1. 程式人生 > >洛谷P1044 棧

洛谷P1044 棧

n) pri ac代碼 nbsp img open type scan +=

之前看這題還是一頭霧水,現在看:啊啊啊lydnb!

思考了一段時間,發現可以用DP。

令f[i]表示有i輛車時的方案術。

我一開始考慮的是在後面加車,可是這樣搞不出狀態轉移方程來。

然後我考慮從前面加,問題迎刃而解!

考慮加在前面的那一輛車的出棧時機,這樣就可以用 f[前] * f[後] 來轉移了。

技術分享圖片
 1 #include <cstdio>
 2 typedef long long LL;
 3 const int N = 22;
 4 
 5 LL f[N];
 6 
 7 int main() {
 8     int n;
 9     scanf("%d", &n);
10 f[1] = f[0] = 1; 11 for(int i = 2; i <= n; i++) { 12 for(int j = 0; j < i; j++) { 13 f[i] += f[j] * f[i - 1 - j]; 14 } 15 } 16 printf("%lld", f[n]); 17 return 0; 18 }
AC代碼

洛谷P1044 棧