1. 程式人生 > >線性dp

線性dp

題意 tps HR 也有 aps tar turn i+1 ont

  線性dp應該是dp中比較簡單的一類,不過也有難的。(矩乘優化遞推請出門右轉)

  

  傳球遊戲:https://www.luogu.org/problemnew/show/P1057

  題意概述:一些人圍成一個圈,每次可以把球傳給左右兩個人,求m步後回到第一個人手裏的方案數。

  這題大概也可以矩乘?不過遞推就可以了,$dp[i][j]$表示傳了j步,現在在i手裏的方案數。轉移:

  $dp[i][j]=dp[i+1][j-1]+dp[i-1][j-1]$

  邊界再處理一下就行了。

   技術分享圖片
# include <cstdio>
# include <iostream>

using
namespace std; int n,m; long long dp[31][31]; int main() { scanf("%d%d",&n,&m); dp[1][0]=1; for (int i=1;i<=m;i++) { dp[1][i]=dp[2][i-1]+dp[n][i-1]; dp[n][i]=dp[n-1][i-1]+dp[1][i-1]; for (int j=2;j<n;j++) dp[j][i]=dp[j-1][i-1]+dp[j+1
][i-1]; } printf("%d",dp[1][m]); return 0; }
傳球遊戲

線性dp