fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define int long long
  4. #define ii pair<int, int>
  5. #define F first
  6. #define S second
  7. const int N = 20, M = 1e9+7, inf = 1e18;
  8. int n, m, dp[2005][15][2005];
  9. signed main()
  10. {
  11. //freopen("main.inp", "r", stdin);
  12. //freopen("main.out", "w", stdout);
  13. ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  14. cin >> n >> m;
  15. dp[0][n][0] = 1;
  16. for(int i = 1; i <= m; i++) {
  17. for(int msk = 0; msk < (1 << n); msk++) dp[i][0][msk] = dp[i-1][n][msk];
  18. for(int j = 1; j <= n; j++) {
  19. for(int msk = 0; msk < (1 << n); msk++) {
  20. bool use = (1 << (j-1)) & msk;
  21. if(use) dp[i][j][msk] += dp[i][j-1][msk-(1 << (j-1))];
  22. else {
  23. dp[i][j][msk] += dp[i][j-1][msk+(1<<(j-1))];
  24. if(j > 1 && !((1 << (j-2)) & msk)) dp[i][j][msk] += dp[i][j-2][msk];
  25. }
  26. dp[i][j][msk] %= M;
  27. }
  28. }
  29. }
  30. cout << dp[m][n][0];
  31. return 0;
  32. }
Success #stdin #stdout 0s 5300KB
stdin
Standard input is empty
stdout
1