其他分享
首页 > 其他分享> > 线性DP总结(studying

线性DP总结(studying

作者:互联网

写在前面

虽然都说线性DP是入门,但我还是今天才开始学

线性DP就是珂以通过线性处理得出答案的一种DP

每一种状态都可以从前面推得,并且推导过程是呈线性的

参考题单(本人现在主要用luogu,所以这些题都是luogu上找的)

下面是例题:

P1057 传球游戏 :

这道题算是热身题吧

思路很简单,

每个人手中的球只能从他左边的同学和右边的同学传过来,所以递推求就好了

我们用i表示编号,j表示第几次传球,f[][]表示有几条到达这种状态的“路”

那么可以推出递推式:

f[1][0] = 1;

f[i][j] = f[i-1][j-1] + f[i+1][j-1];

下面是代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 int n, m;
 5 int f[33][33];
 6 int main()
 7 {
 8     scanf("%d%d", &n, &m);
 9     f[1][0] = 1;
10     for(int j = 1; j <= m; ++j){
11         for(int i = 1; i <= n; ++i){
12             int x, y;
13             if(i - 1 == 0) x = n;
14             else x = i - 1;
15             if(i + 1 == n + 1) y = 1;
16             else y = i + 1;
17             f[i][j] = f[x][j-1] + f[y][j-1];
18         }
19     }
20     printf("%d", f[1][m]);
21     
22     return 0;
23 }
View Code

 

标签:int,studying,33,luogu,线性,include,DP
来源: https://www.cnblogs.com/Silymtics/p/13828964.html