Submission #347832

#TimeUsernameProblemLanguageResultExecution timeMemory
347832juggernautAliens (IOI16_aliens)C++14
25 / 100
2095 ms94956 KiB
#include"aliens.h"
#include<bits/stdc++.h>
#ifdef EVAL
#else
#include"grader.cpp"
#endif
using namespace std;
typedef long long ll;
vector<vector<ll>>dp;
pair<ll,ll>a[50005],b[50005];
bool cmp(pair<ll,ll>l,pair<ll,ll>r){
    if(l.first==r.first)return l.second>r.second;
    return l.first<r.first;
}
ll sq(ll a){
    return a*a;
}
ll cost(ll l, ll r){
    return sq(max(0ll,b[r].second-b[l].first+1))-sq(max(0ll,b[l-1].second-b[l].first+1));
}
ll take_photos(int n,int m,int k,vector<int>r,vector<int>c){
    dp.assign(n+5,vector<ll>(k+5,1e15));
    dp[0][0]=0;
    for(int i=0;i<n;i++)a[i+1]={min(r[i],c[i])+1,max(r[i],c[i])+1};
    sort(a+1,a+1+n,cmp);
    ll last=0,pos=0;
    for(int i=1;i<=n;i++)
    if(a[i].second>last){
        last=a[i].second;
        b[++pos]=a[i];
    }
    n=pos;
    ll res=1e15;
    for(int i=1;i<=k;i++){
        for(int j=1;j<=n;j++)
            for(int l=1;l<=j;l++)dp[j][i]=min(dp[j][i],dp[l-1][i-1]+cost(l,j));
        res=min(res,dp[n][i]);
    }
    return res;
}
#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...