*[hackerrank]Girlfriend & Necklace

https://www.hackerrank.com/contests/w8/challenges/gneck

有点意思。是DP,最优解包含最优子问题。F(X)=F(X-1)+F(X-3)。因为F(X-1)右边放个“R”和F(X-3)右边放"RRB"是左右可以互推的,包含全了最右是R和B的两种情况。

#include <iostream>

using namespace std;



const uint64_t MOD = 1000000007;



uint64_t resolve(uint64_t x) {

    uint64_t a = 3; //2

    uint64_t b = 4; //3

    uint64_t c = 6; //4

    if (x == 2)

        return a;

    if (x == 3)

        return b;

    if (x == 4)

        return c;

    for (int64_t i = 5; i <= x; i++) {

        int64_t r = a + c;

        a = b % MOD;

        b = c % MOD;

        c = r % MOD;

    }

    return c;

}



int main() {

    int T;

    cin >> T;

    while (T--) {

        uint64_t N;

        cin >> N;

        cout << resolve(N) << endl;

    }

    return 0;

}

  

你可能感兴趣的:(rank)