浏览代码

动态规划递推

爱玲姐姐 5 年之前
父节点
当前提交
104c4d6fe9
共有 1 个文件被更改,包括 34 次插入0 次删除
  1. 34 0
      D.cpp

+ 34 - 0
D.cpp

@@ -0,0 +1,34 @@
+#include <bits/stdc++.h>
+ 
+using namespace std;
+typedef unsigned long long LL;
+const int MAXN = 1000000 + 10;
+const LL MOD = 1000000007;
+LL f[MAXN][2][2] = {0};
+ 
+inline LL mpower(LL a, int x) {
+    a %= MOD;
+    if (x == 1 || a == 0)return a;
+    if (x == 0)return 1;
+    if (x & 1) return (a * mpower(a * a % MOD, x >> 1)) % MOD;
+    return mpower(a * a % MOD, x >> 1);
+}
+ 
+int main() {
+    int n;
+    cin >> n;
+    if (n < 3) {
+        cout << 0 << endl;
+        return 0;
+    }
+ 
+    f[3][0][0] = f[3][0][1] = f[3][1][0] = 2, f[3][1][1] = 1;
+    for (int i = 4; i <= n; i++) {
+        f[i][0][0] = (f[i - 1][0][0] + f[i - 1][0][1]) % MOD;
+        f[i][0][1] = (f[i - 1][1][1] + f[i - 1][1][0]) % MOD;
+        f[i][1][0] = (f[i - 1][0][0] + f[i - 1][0][1]) % MOD;
+        f[i][1][1] = f[i - 1][1][0];
+    }
+    cout << ((mpower(2, n) - (f[n][0][0] + f[n][0][1] + f[n][1][0] + f[n][1][1])) % MOD + MOD) % MOD << endl;
+    return 0;
+}