dp[n]表示总共有2*n层的只考虑左边路径总数
然后单边情况下,
d[n]只考虑水平方向那个3*n的奇怪东西的路径总数
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int N=1e6+10;
typedef __int64 LL;
const int mod=1e9+9;
LL dp[N],d[N];
void init(){
int n=1e6;
d[0]=1;
for(int i=1;i<=n;i++){
d[i]=(d[i-1]*2+3)%mod;
}
for(int i=1;i<=n;i++){
d[i]*=d[i-1];d[i]%=mod;
}
dp[2]=2;
for(int i=4;i<=n;i+=2){
dp[i]=(dp[i-2]+d[(i/2-2)]*4)%mod;
}
}
int main(){
#ifdef DouBi
freopen("in.cpp","r",stdin);
#endif // DouBi
int n;
init();
while(scanf("%d",&n)!=EOF){
LL ans=(dp[n]*dp[n]%mod*2%mod+2)%mod;
printf("%I64d\n",ans);
}
return 0;
}
动态规划求解路径总数
本文介绍了一种使用动态规划解决特定场景下路径总数的方法。通过定义dp数组来记录不同规模问题的解,并利用d数组处理特殊情况的路径计数。最终实现了一个能够高效计算给定尺寸网格中路径数量的算法。
487

被折叠的 条评论
为什么被折叠?



