Advertisement
Malinovsky239

УРКОП 2011: D

Oct 22nd, 2011
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.94 KB | None | 0 0
  1. #include <cstdio>
  2. #include <iostream>
  3. #include <algorithm>
  4.  
  5. #define N 42
  6. #define M 102
  7.  
  8. using namespace std;
  9.  
  10. typedef unsigned char uc;
  11.  
  12. uc dp[N][N][M][M];
  13.  
  14. uc max(int a, uc b) {
  15.     uc c = uc(a);
  16.     return max(c, b);
  17. }
  18.  
  19. int main() {
  20.     int a, b;
  21.     cin >> a >> b;
  22.  
  23.     for (int i = 0; i <= 40; i++)
  24.         for (int j = 0; j <= 40; j++)
  25.             if (i + j) {
  26.                 for (int k = i; k <= a; k++)
  27.                     for (int l = j; l <= b; l++) {
  28.                         if (i)
  29.                             dp[i][j][k][l] = max(dp[i - 1][j][k - 1][l] + 1, dp[i][j][k][l]);
  30.                         else {
  31.                             if (k)
  32.                                 dp[i][j][k][l] = max(dp[i][j][k - 1][l] + 2, dp[i][j][k][l]);
  33.                         }
  34.  
  35.                         int add = (i > 0 ? 2 : 1);
  36.  
  37.                         if (j)
  38.                             dp[i][j][k][l] = max(dp[i][j - 1][k][l - 1] + add, dp[i][j][k][l]);                        
  39.                         else {
  40.                             if (l)
  41.                                 dp[i][j][k][l] = max(dp[i][j][k][l - 1] + 2, dp[i][j][k][l]);                          
  42.                         }
  43.                     }
  44.             }
  45.  
  46.     cout << int(dp[40][40][a][b]);
  47.     return 0;
  48. }
  49.  
  50.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement