Alex_tz307

Cherchez vol 2 - Suma - pag 194(ONI 2005) - 90 puncte

Sep 24th, 2020 (edited)
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.43 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. // http://campion.edu.ro/arhiva/index.php?page=problem&action=view&id=683
  3.  
  4. using namespace std;
  5.  
  6. ifstream fin("suma2.in");
  7. ofstream fout("suma2.out");
  8.  
  9. inline void max_self(int& a, int b) {
  10.     a = max(a, b);
  11. }
  12.  
  13. int main() {
  14.     int N;
  15.     fin >> N;
  16.     int M = N;
  17.     vector < int > a;
  18.     a.push_back(0);
  19.     while(N--) {
  20.         string s;
  21.         fin >> s;
  22.         for(int i = 0; i < (int)s.size(); ++i)
  23.             a.push_back(s[i] - '0');
  24.     }
  25.     N = a.size() - 1;
  26.     vector < vector < int > > dp(4, vector < int >(M + 1, -1));
  27.     dp[1][1] = a[1];
  28.     dp[2][1] = a[1] * 10 + a[2];
  29.     if(a[2])
  30.         dp[2][2] = a[1] + a[2];
  31.     dp[3][1] = a[1] * 100 + a[2] * 10 + a[3];
  32.     if(a[3])
  33.          max_self(dp[3][2], a[1] * 10 + a[2] + a[3]);
  34.     if(a[2] && a[3])
  35.         dp[3][3] = a[1] + a[2] + a[3];
  36.     for(int i = 4; i <= N; ++i) {
  37.         int DIM = min(i, M);
  38.         for(int j = 2; j <= DIM; ++j) {
  39.             if(a[i] > 0 && dp[(i - 1) % 4][j - 1] != -1)
  40.                 max_self(dp[i % 4][j], dp[(i - 1) % 4][j - 1] + a[i]);
  41.             if(a[i - 1] > 0 && dp[(i - 2) % 4][j - 1] != -1)
  42.                 max_self(dp[i % 4][j], dp[(i - 2) % 4][j - 1] + a[i - 1] * 10 + a[i]);
  43.             if(a[i - 2] > 0 && dp[(i - 3) % 4][j - 1] != -1)
  44.                 max_self(dp[i % 4][j], dp[(i - 3) % 4][j - 1] + a[i - 2] * 100 + a[i - 1] * 10 + a[i]);
  45.         }
  46.     }
  47.     fout << dp[N % 4][M];
  48. }
  49.  
Add Comment
Please, Sign In to add comment