fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define int long long int
  4. #define double long double
  5. #define print(a) for(auto x : a) cout << x << " "; cout << endl
  6.  
  7.  
  8. const int M = 1000000007;
  9. const int N = 3e5+9;
  10. const int INF = 2e9+1;
  11. const int LINF = 2000000000000000001;
  12.  
  13. inline int power(int a, int b, int mod=M) {
  14. int x = 1;
  15. a %= mod;
  16. while (b) {
  17. if (b & 1) x = (x * a) % mod;
  18. a = (a * a) % mod;
  19. b >>= 1;
  20. }
  21. return x;
  22. }
  23.  
  24.  
  25. //_ ***************************** START Below *******************************
  26.  
  27.  
  28.  
  29.  
  30. vector<int> a;
  31. vector<int> b;
  32.  
  33. int consistency1(int n){
  34. if(n == 1) return a[0];
  35.  
  36. vector<int> dpA(n+1, INF);
  37. vector<int> dpB(n+1, INF);
  38. dpA[0] = 0;
  39. dpB[0] = 0;
  40.  
  41. for(int i=1; i<=n; i++){
  42.  
  43. int j = i-1;
  44. int sumA = a[i-1];
  45. int sumB = b[i-1];
  46.  
  47. while(j>=0){
  48.  
  49. dpA[i] = min( {dpA[i], dpA[j]+sumA , dpB[j]+sumA });
  50.  
  51. if(i-j>=2) dpB[i] = min( {dpB[i], dpA[j]+sumB , dpB[j]+sumB });
  52.  
  53. if(j-1>=0) sumA += a[j-1];
  54. if(j-1>=0) sumB += b[j-1];
  55. j--;
  56. }
  57. }
  58.  
  59. return min(dpA[n] , dpB[n]);
  60. }
  61.  
  62.  
  63.  
  64.  
  65. int consistency2(int n){
  66.  
  67. if(n==1) return a[0];
  68.  
  69. vector<int> dpA(n+1, INF);
  70. vector<int> dp1B(n+1, INF);
  71. vector<int> dp2B(n+1, INF);
  72.  
  73. dpA[0] = 0;
  74. dp1B[0] = 0;
  75. dp2B[0] = 0;
  76.  
  77. dpA[1] = a[0];
  78. dp1B[1] = b[0];
  79. dp2B[1] = INF;
  80.  
  81.  
  82. for(int i=2; i<=n; i++){
  83.  
  84. dpA[i] = min( dpA[i-1] , dp2B[i-1] ) + a[i-1];
  85. dp2B[i] = min( dpA[i-2] , dp1B[i-2] ) + b[i-2] + b[i-1];
  86. dp1B[i] = min( dpA[i-1] , dp1B[i-1] ) + b[i-1];
  87. }
  88.  
  89. return min( dpA[n] , dp2B[n] );
  90. }
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105. int practice(int n){
  106.  
  107.  
  108. return 0;
  109. }
  110.  
  111.  
  112.  
  113.  
  114.  
  115. void solve() {
  116.  
  117. int n;
  118. cin>> n;
  119.  
  120. a.resize(n);
  121. b.resize(n);
  122. for(int i=0; i<n; i++) cin >> a[i];
  123. for(int i=0; i<n; i++) cin >> b[i];
  124.  
  125. cout << consistency1(n) << " " << consistency2(n) << endl;
  126.  
  127.  
  128. }
  129.  
  130.  
  131.  
  132.  
  133.  
  134. int32_t main() {
  135. ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  136.  
  137. int t = 1;
  138. // cin >> t;
  139. while (t--) {
  140. solve();
  141. }
  142.  
  143. return 0;
  144. }
Success #stdin #stdout 0s 5316KB
stdin
5
3 5 2 1 9
1 1 10 5 3
stdout
12 12