1 solutions

  • 0
    @ 2023-12-3 20:53:33

    C++ :

    #include <cstdio>
    #include <iostream>
    #include <cmath>
    #include <algorithm>
    using namespace std;
    struct XX{
      int x, y;
    }a[550]; 
    bool cmp(const XX&x, const XX&y){
      if (x.x + x.y != y.x + y.y){
        return x.x + x.y < y.x + y.y;
      }
    }
    int dp[550][110];
    int main(){
      int n, m;
      scanf("%d%d", &n, &m);
      for (int i = 0; i < n; ++i){
        scanf("%d%d", &a[i].x, &a[i].y);
      }
      sort(a, a + n, cmp);
      int ans = 0;
      for (int i = 0; i < n ; ++i){
        for (int k = 0; k <= m; ++k){
          dp[i][k] = 1;
        }
        for (int j = 0; j < i; ++j){
          if (a[i].x >= a[j].x && a[i].y >= a[j].y){
            int del = a[i].x - a[j].x + a[i].y - a[j].y - 1;
            for (int k = 0; k <= m - del; ++k){
              dp[i][k + del] = max(dp[i][k + del], dp[j][k] + del + 1);
              ans = max(ans, dp[i][k + del] + m - k - del);
            }
          }
        }
      }
      printf("%d\n", ans);
      return 0; 
    }
    
    • 1

    Information

    ID
    1187
    Time
    1000ms
    Memory
    512MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By