开始刷kuangbin数学专题发现没有数学基础完全刷不动…
于是决定先把洛谷的一些基础刷完
然而数学&DP方面就学了一点点,基础实在太烂
补题补题补题
有 I 型和 L 型的砖,问铺满2*n的墙壁有多少种方法
典型的递推
f[n]表示刚好填满第n列的墙壁的方法数;
g[n]表示第n-1列已经被填了一个情况下,再填上 I 或者 L砖的方法数量
考虑两种情况:
第一种情况,刚好填满第n列的墙壁,有直接填上 I 或者n-1列刚好有一个已经填了,就填上L,由于L瓷砖可以旋转,所以有两种放法
f[n]=f[n-1]+f[n-2]+g[n-2]x2;
第二种情况,第n-1列的墙壁已经填好了一个,如果填一个 I 型的话第n列就还是空了一个,填一个L就满上了
g[n]=g[n-1]+f[n-1]
code:
#include<bits/stdc++.h>
using namespace std;
#define int long long
int f[1000005],n;
int g[1000000];
const int mod=1e4;
signed main(){
cin>>n;
f[0]=1;
f[1]=1;
g[1]=1;
for(int i=2;i<=n;i++){
f[i]=(f[i-1]+f[i-2]+2*g[i-2])%mod;
g[i]=(g[i-1]+f[i-1])%mod;
}
cout<<f[n]%mod;
return 0;
}