线性dp

Posted shzr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线性dp相关的知识,希望对你有一定的参考价值。

  线性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的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中的地图片段内中心线性布局?

NYOJ17 最长单调递增子序列 线性dp

添加两个窗格的平板电脑布局会导致在移动设备中找不到视图(小于w600dp)

hdu 1300 Pearls(线性dp/斜率优化)

P3558 [POI2013]BAJ-Bytecomputer(线性dp)

垂直线性布局中的多个片段