제출 #1052367

#제출 시각아이디문제언어결과실행 시간메모리
1052367cjoaAliens (IOI16_aliens)C++17
12 / 100
67 ms6648 KiB
#include "aliens.h"

#include <bits/stdc++.h>

using namespace std;

int N, K, M;
vector<int> R;

const long long INF = 1e18 + 123;

const int MAXN = 1000;

bool cached[MAXN+1][MAXN+1];
long long memo[MAXN+1][MAXN+1];

// dp(i) = minima suma de areas que cubren los puntos desde i hasta N-1
long long dp( int i, int rem_fotos ) {
   if (i == N)
      return 0;

   if (cached[i][rem_fotos])
      return memo[i][rem_fotos];

   long long res = INF;
   if (rem_fotos > 0) {
      for (int j = i; j < N; j++) {
         long long area_foto = (R[j] - R[i] + 1) * 1LL * (R[j] - R[i] + 1);
         long long cur = area_foto + dp( j + 1, rem_fotos-1 );
         res = min(res, cur);
      }
   }
   
   cached[i][rem_fotos] = true;
   memo[i][rem_fotos] = res;
   
   return res;
}


long long take_photos(int n, int m, int k,
                      std::vector<int> r, std::vector<int> c) {
   N = n;
   R = r;
   sort(R.begin(), R.end());
   K = k;
   M = m;

   for (int i = 0; i < n; i++)
      for (int k = 0; k <= n; k++)
         cached[i][k] = false;

   return dp( 0, K );
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...