fork download
  1. // ROOT : DRAGON3012009
  2. #include <bits/stdc++.h>
  3. #define ll int
  4. #define ld long double
  5. #define el "\n"
  6. #define fast ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  7. #define __ROOT__ int main()
  8. #pragma GCC optimize("O2")
  9. #define FOR(i,l,r) for(int i = l ; i <= r ; i ++)
  10. #define FORD(i,r,l) for(int i = r ; i >= l ; i --)
  11. #define REP(i, a ) for(int i = 0 ; i < a ; i ++ )
  12. #define fi first
  13. #define se second
  14. #define M 1000007
  15. #define MAXN 100001
  16. #define INF (1ll<<30)
  17. #define BLOCK_SIZE 425
  18. #define MAX_NODE 1001001
  19. #define LOG 19
  20. #define ALPHA_SIZE 26
  21. #define BASE 311
  22. #define NAME "file"
  23. #define compare(v) sort((v).begin(), (v).end()); (v).erase(unique((v).begin(), (v).end()), (v).end());
  24. using namespace std;
  25. const ll MOD[] = {(ll)1e9 + 2277, (ll)1e9 + 5277, (ll)1e9 + 8277, (ll)1e9 + 9277, (ll) 1e9 + 7 };
  26. const ll NMOD = 1;
  27. const int dx[] = {-1, 0, 1,0};
  28. const int dy[] = {0, 1, 0, -1};
  29. //**Variable**//
  30. ll n, k ;
  31. ll dp[MAXN][2][101][2] ; // pos - k - ma ;
  32. //**Struct**//
  33.  
  34. //**Function**//
  35. template<class X, class Y >
  36. bool minimize(X & x, const Y &y ) {
  37. if(x > y ) {
  38. x = y ;
  39. return true ;
  40. } else return false;
  41. }
  42. template<class X, class Y >
  43. bool maximize(X &x, const Y &y ) {
  44. if(x < y ) {
  45. x = y ;
  46. return true;
  47. } else return false ;
  48. }
  49. ll add(ll a, ll b ) {
  50. return (a + b ) % M;
  51. }
  52. ll DP(ll pos,ll last, ll cnt, ll ok ) {
  53. if(pos < 0 ) return 0 ;
  54. ll &cur = dp[pos][last][cnt][ok] ;
  55. if(pos == 0 ) {
  56. return cur = (cnt >= k || ok) ;
  57. }
  58. if(cur != -1 ) return cur ;
  59. cur = 0 ;
  60. if(cnt >= k || ok ) {
  61. cur =add(cur, DP(pos - 1, 0, 0, 1)) ;
  62. cur= add(cur, DP(pos -1,1,cnt, 1) ) ;
  63. } else {
  64. cur = add(cur, DP(pos - 1, 0, 0,ok ) ) ;
  65. cur = add(DP(pos - 1, 1, cnt + 1, ok ), cur ) ;
  66. }
  67. return cur % M ;
  68. }
  69. void init() {
  70. cin>>n>> k ;
  71. memset(dp, -1, sizeof dp ) ;
  72. }
  73.  
  74. void solve() {
  75. cout << DP(n, 0, 0, 0 ) ;
  76. }
  77.  
  78. __ROOT__ {
  79. // freopen(NAME".inp" , "r" , stdin);
  80. // freopen(NAME".out" , "w", stdout) ;
  81. fast;
  82. init();
  83. solve();
  84. }
  85.  
Success #stdin #stdout 0.04s 161480KB
stdin
3001
29
stdout
785231