結果

提出番号 499
提出者 ei1333
言語 C++
提出日時 2017-07-20 23:44:03
問題名 (15)掛け算フィボナッチ
結果 AC
点数 100%

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 AC 100% 2ms 7776KB
2 AC 100% 17ms 11616KB
3 AC 100% 27ms 15376KB
4 AC 100% 24ms 13328KB
5 AC 100% 56ms 22544KB
6 AC 100% 27ms 15344KB
7 AC 100% 50ms 20832KB

ソースコード

#include <bits/stdc++.h>

using namespace std;


typedef long long int64;
const int mod = 1e9 + 7;

inline int64 modPow(int64 x, int64 n)
{
  if(n == 0) return (1);
  int64 ret = modPow(x, n / 2);
  (ret *= ret) %= mod;
  if(n & 1) (ret *= x) %= mod;
  return (ret);
}

inline int64 modInv(int64 a)
{
  return (modPow(a, mod - 2));
}


int dp[100001];

int64 rec(int idx)
{
  if(idx <= 0) return (1);
  if(~dp[idx]) return (dp[idx]);
  return (dp[idx] = (rec(idx - 2) * rec(idx - 1) % mod * modInv(rec(idx - 3)) % mod + rec(idx - 1) * rec(idx - 1) % mod * modInv(rec(idx - 2)) % mod) % mod);
}

int main()
{
  int N;
  cin >> N;
  memset(dp, -1, sizeof(dp));
  cout << rec(N - 2) << endl;
}