c_cpp Hackerrank的“乐高积木”问题的动态编程/递归解决方案。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp Hackerrank的“乐高积木”问题的动态编程/递归解决方案。相关的知识,希望对你有一定的参考价值。

#include <iostream>
#include <vector>
#include <math.h>

using namespace std;

#define MOD 1000000007

unsigned long long power(unsigned long long num, int p) {

  if(p == 0) return 1;
  if(p == 1) return num;

  unsigned long long number = num;
  for(int i=2;i<=p;i++) {
    num *= number;
    num %= MOD;
  }
  return num;
}

int main() {

  int N, M;

  vector<long long> T(1001);
  vector<long long> S(1001);
  vector<long long> P(1001);

  T[0] = T[1] = 1;
  T[2] = 2;
  T[3] = 4;
  T[4] = 8;

  P[0] = P[1] = 1;

  for(int i=5;i<=1000;i++)
    T[i] = (T[i-1] + T[i-2] + T[i-3] + T[i-4])%MOD;

  S[0] = 1;
  S[1] = 1;

  long long sum;
  int Tt;
  cin >> Tt;

  for(int t=0;t<Tt;t++) {
    cin >> N >> M;

    for(int i=0;i<=M;i++)
      P[i] = (long long)power(T[i],N);

    for(int i=2;i<=M;i++) {
      sum = 0;
      for(int j=1;j<i;j++) {
	sum += (S[j]*P[i-j])%MOD;
	sum %= MOD;
      }
      S[i] = (P[i] - sum);
      S[i] = S[i]%MOD;
    }
    while(S[M] < 0)
      S[M] += MOD;
    cout << S[M] << endl;
  }

}

以上是关于c_cpp Hackerrank的“乐高积木”问题的动态编程/递归解决方案。的主要内容,如果未能解决你的问题,请参考以下文章

耗时 2 年,用 8.5 万块乐高积木最牛复刻 Apple Park

耗时 2 年,用 8.5 万块乐高积木最牛复刻 Apple Park

c_cpp 循环检测 - Hackerrank

c_cpp 30天代码HackerRank

c_cpp 获取节点值 - Hackerrank

c_cpp [HackerRank]预订Hackathon 2015