题目名称:水池注水
题目描述
给定nn水池。 向nn水池中注水。 每行每列只能注水一个方格。 如果一个方格的四周有两个方格已经注水,则该方格也会被水覆盖。 小Q想知道自己有多少种方案可以使得自己的水池被完全覆盖。
输入描述:
给定整数n。(1<=n<=1e5)
输出描述:
输出方案数,对1e9+7取模。
示例
示例1
输入
4
输出
22
题目名称:水池注水
题目描述
给定nn水池。 向nn水池中注水。 每行每列只能注水一个方格。 如果一个方格的四周有两个方格已经注水,则该方格也会被水覆盖。 小Q想知道自己有多少种方案可以使得自己的水池被完全覆盖。
输入描述:
给定整数n。(1<=n<=1e5)
输出描述:
输出方案数,对1e9+7取模。
示例
示例1
输入
4
输出
22
#include <iostream>
using namespace std;
const int mod = 1e9 + 7;
int f[100005][3];
int main()
{
int n;
cin >> n;
f[0][0] = 1;
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= n; j++)
{
f[j][0] = (f[j-1][0] + f[j-1][1] + f[j-1][2]) % mod;
f[j][1] = (f[j-1][0] + f[j-1][2] + f[j][j-1][0] + f[j][j-1][2]) % mod;
f[j][2] = (f[j-1][1] + f[j][j-1][1] + f[j-1][j-1][2]) % mod;
}
}
cout << f[n][2] << endl;
return 0;
}