fork download
  1. #include <iostream>
  2. #include <algorithm>
  3. using namespace std;
  4. typedef long long ll;
  5. #define MOD 1000000009
  6.  
  7. ll dp[4][100002]; // dp[i][n] : i로 n을 만들수잇는 경우의 수
  8.  
  9. // 같은수를 "연속"해서 사용하면 안된다
  10. // "연속" 을 체크해서 dfs를 구현한다
  11.  
  12. ll dfs(int num, int now) {
  13. if (num < 0) return 0;
  14. if (num == 0) return 1;
  15.  
  16. ll& res = dp[now][num];
  17. if (res) return res;
  18.  
  19. for (int i = 1; i <= 3; i++) {
  20. if (i != now) res += dfs(num - i, i)%MOD;
  21. }
  22.  
  23. return res%MOD;
  24. }
  25.  
  26. int main() {
  27. ios::sync_with_stdio(0), cin.tie(0);
  28. int T; cin >> T;
  29. while (T--) {
  30. int num; cin >> num;
  31.  
  32. cout << dfs(num, 0) << "\n";
  33. }
  34.  
  35. return 0;
  36. }
  37.  
Success #stdin #stdout 0.01s 11304KB
stdin
1 100000
stdout
437690554