Submission #1361854

#TimeUsernameProblemLanguageResultExecution timeMemory
1361854Charizard2021Lego Wall (EGOI22_legowall)C++20
0 / 100
3094 ms6212 KiB
#include<bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
long long binExp(long long a, long long b){
    long long ans = 1;
    while(b > 0){
        if(b % 2 == 1){
            ans = (ans * a);
            b--;
        }
        b /= 2;
        a = (a * a);
    }
    return ans;
}
int main(){
    long long w, h;
    cin >> w >> h;
    vector<long long> fib(1 + w);
    fib[0] = 1;
    fib[1] = 1;
    for(long long i = 2; i <= w; i++){
        fib[i] = (fib[i - 1] + fib[i - 2]) % MOD;
    }
    vector<long long> dp(1 + w, 0);
    vector<long long> cntNot(1 + w, 0);
    dp[0] = 1;
    for(long long i = 1; i <= w; i++){
        for(long long j = 1; j < i; j++){
            cntNot[i] = (cntNot[i] + dp[j] * cntNot[i - j]) % MOD;
        }
        dp[i] = binExp(fib[i], h);
        dp[i] = (dp[i] - cntNot[i]) % MOD;
        if(dp[i] < 0) dp[i] += MOD;
        cntNot[i] = (cntNot[i] + dp[i]) % MOD;
    }
    cout << dp[w] << "\n";
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...