同理先遍历右边也是这样
s
u
m
=
4
∗
b
[
n
]
+
Σ
i
=
2
N
−
1
(
2
∗
2
∗
b
[
i
]
∗
a
[
n
−
i
]
+
2
∗
2
∗
b
[
n
−
i
+
1
]
∗
a
[
i
−
1
]
)
sum = 4*b[n] + \Sigma_{i=2}^{N-1} (2*2*b[i]*a[n-i] + 2*2*b[n-i+1] * a[i-1])
sum=4∗b[n]+Σi=2N−1(2∗2∗b[i]∗a[n−i]+2∗2∗b[n−i+1]∗a[i−1])
公式左边是先遍历左边,右边是先遍历右边,画图注意先遍历右边的索引问题
#include <iostream>
#define MOD 1000000007
using namespace std;
const int maxn = 1e3+5;
long long a[maxn];
long long b[maxn];
int n;
int main() {
cin >> n;
b[1] = 1;
for (int i=2; i<=n; i++)
b[i] = (b[i-1] * 2 % MOD);
a[1] = 1;
a[2] = 6; //
for (int i=3; i<=n; i++)
a[i] = ( 2*a[i-1] + b[i] + 4*a[i-2] ) % MOD;
long long sum = (4*a[n])%MOD;
for (int i=2; i<n; i++) {
sum = (sum + (4 * b[i] * a[n-i])%MOD + (4 * b[n-i+1] * a[i-1])%MOD) % MOD;
}
if (n == 1) sum = 2;
cout << sum;
return 0;
}