fork download
  1. #include <iostream>
  2. #include <algorithm>
  3. using namespace std;
  4.  
  5. typedef long long ll;
  6.  
  7. ll n, k, b[1000], a[1000];
  8. ll dp[707][707];
  9.  
  10. ll f(ll l, ll r)
  11. {
  12. if (l >= r)
  13. return 0;
  14. if (dp[l][r] > -1e10)
  15. return dp[l][r];
  16. if (b[l] > k)
  17. {
  18. dp[l][r] = f(l+1, r);
  19. return dp[l][r];
  20. }
  21. bool found = false;
  22. for (ll i = l + 1; i <= r; ++i)
  23. {
  24. if (b[i] == b[l] + k)
  25. {
  26. found = true;
  27. dp[l][r] = max(dp[l][r], (a[l] + a[i] + f(l+1, i-1) + f(i+1, r)));
  28. }
  29. }
  30. dp[l][r] = found ? max(dp[l][r], f(l+1, r)) : f(l+1, r);
  31. return dp[l][r];
  32. }
  33.  
  34. void solve()
  35. {
  36. cin >> n >> k;
  37. for (int i = 0; i < n; ++i)
  38. cin >> a[i];
  39. for (int i = 0; i < n; ++i)
  40. cin >> b[i];
  41. for (ll i = 0; i <= n; ++i)
  42. for (ll j = 0; j <= n; ++j)
  43. dp[i][j] = -1e11;
  44. cout << max(0LL, f(0, n-1)) << '\n';
  45. }
  46.  
  47. int main()
  48. {
  49. ios_base::sync_with_stdio(false);
  50. cin.tie(NULL);
  51.  
  52. int t { 1 };
  53. // cin >> t;
  54. while (t--)
  55. solve();
  56.  
  57. return 0;
  58. }
  59.  
Success #stdin #stdout 0s 19160KB
stdin
Standard input is empty
stdout
0