Submission #1248274

#TimeUsernameProblemLanguageResultExecution timeMemory
1248274julia_08Aliens (IOI16_aliens)C++20
0 / 100
0 ms328 KiB
#include <bits/stdc++.h>
#include "aliens.h"

using ll = long long;

using namespace std;

const int MAXN = 510;

ll dp[MAXN][MAXN], inter[MAXN];

ll take_photos(int n, int m, int k, vector<int> r, vector<int> c){

  vector<pair<int, int>> v;

  for(int i=0; i<n; i++){
    if(r[i] > c[i]) swap(r[i], c[i]);
    v.push_back({c[i], -r[i]});
  }

  vector<pair<int, int>> cells;

  for(auto [c, r] : v){

    while(!cells.empty() && -r <= cells.back().second) cells.pop_back();

    if(!cells.empty()){
      int l = cells.back().first;
      if(-r <= cells.back().second) inter[cells.size()] = (c - l + 1) * (c - l + 1);
    }

    cells.push_back({-r, c});

  }

  n = cells.size();

  dp[0][0] = 0;
 
  for(int i=1; i<=n; i++) dp[i][0] = 1e9;

  for(int i=1; i<=n; i++){
    for(int j=1; j<=k; j++){

      dp[i][j] = 1e9;

      int l_min = cells[i - 1].second;

      for(int l=i-1; l>=0; l--){

        l_min = min(l_min, cells[l].first);

        ll cost = (cells[i - 1].second - l_min + 1) * (cells[i - 1].second - l_min + 1);

        dp[i][j] = min(dp[i][j], dp[l][j - 1] + cost - inter[i]);

      }

    }
  }

  return dp[n][k];

}

Compilation message (stderr)

aliens.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
aliens_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#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...