线性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