제출 #711835

#제출 시각아이디문제언어결과실행 시간메모리
711835bin9638Aliens (IOI16_aliens)C++17
12 / 100
31 ms2388 KiB
#include <bits/stdc++.h>

#ifndef SKY
#include "aliens.h"
#endif // SKY

using namespace std;

#define ll long long
#define pb push_back
#define N 100010
#define ii pair<int,int>
#define fs first
#define sc second

ll l[N],r[N],dp[510][510];
ii a[N];

bool SS(const ii&u,const ii&v)
{
    if(u.fs!=v.fs)
        return u<v;
    return(u.sc>v.sc);
}

ll sqr(ll x)
{
    return x*x;
}

void selfmin(ll&u,ll v)
{
    u=min(u,v);
}

ll take_photos(int n, int m, int k, vector<int> r, vector<int> c)
{
    for(int i=0;i<n;i++)
    {
        a[i+1].fs=min(r[i],c[i])+1;
        a[i+1].sc=max(r[i],c[i])+1;
    }
    sort(a+1,a+1+n,SS);
    int dem=0,max_r=0;
    for(int i=1;i<=n;i++)
    {
        if(a[i].sc<=max_r)
            continue;
        max_r=a[i].sc;
        l[++dem]=a[i].fs;
        r[dem]=a[i].sc;
    }
    n=dem;
    k=min(k,n);
   // for(int i=1;i<=n;i++)cout<<l[i]<<" "<<r[i]<<endl;
    memset(dp,0x3f3f,sizeof(dp));
    for(int i=1;i<=n;i++)
        dp[i][1]=sqr(l[i]-l[1]+1);
    for(int t=1;t<=k;t++)
        for(int i=t;i<=n;i++)
            for(int j=t;j<=i;j++)
                selfmin(dp[i][t],dp[j-1][t-1]+sqr(l[i]-l[j]+1));
    return dp[n][k];
}

#ifdef SKY
int main()
{
    freopen("A.inp","r",stdin);
    freopen("A.out","w",stdout);
    int n,m,k;
    vector<int>r,c;
    cin>>n>>m>>k;
    for(int i=1;i<=n;i++)
    {
        int u,v;
        cin>>u>>v;
        r.pb(u);
        c.pb(v);
    }
    cout<<take_photos(n,m,k,r,c);
}
#endif
#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...