fork download
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. typedef long long ll;
  6. typedef pair<int, int> ii;
  7.  
  8. const int INF = 1e9;
  9. const ll LINF = 1e18;
  10.  
  11. const int MOD = 1e9 + 7;
  12. const int N = 2e3 + 5;
  13.  
  14. void add(int& a, int b) {
  15. a = (0LL + a + b) % MOD;
  16. if (a < 0) a += MOD;
  17. }
  18.  
  19. int n, m;
  20. int s[N], t[N];
  21.  
  22. int dp[N][N]; // dp[i][j] = Số xâu con chung khác rỗng của s[1..i] và t[1..j]
  23.  
  24. int main() {
  25. ios::sync_with_stdio(false);
  26. cin.tie(nullptr);
  27. cin >> n >> m;
  28. for (int i = 1; i <= n; i++) cin >> s[i];
  29. for (int i = 1; i <= m; i++) cin >> t[i];
  30.  
  31. for (int i = 1; i <= n; i++) {
  32. for (int j = 1; j <= m; j++) {
  33. if (s[i] == t[j]) add(dp[i][j], 1 + dp[i - 1][j - 1]);
  34. add(dp[i][j], dp[i - 1][j] + dp[i][j - 1] - dp[i - 1][j - 1]);
  35. }
  36. }
  37.  
  38. int ans = dp[n][m];
  39. add(ans, 1);
  40.  
  41. cout << ans << '\n';
  42. }
Success #stdin #stdout 0.01s 5288KB
stdin
2 2
1 3
3 1
stdout
3