Submission #773405

#TimeUsernameProblemLanguageResultExecution timeMemory
773405ttamxAliens (IOI16_aliens)C++14
25 / 100
118 ms4180 KiB
#include "aliens.h" #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=505; const int M=1e6+5; const bool dbg=false; int l[N],r[N]; ll overlap[N]; int mn[M]; stack<pair<int,int>> s; long long take_photos(int n, int m, int k, vector<int> R, vector<int> C) { for(int i=0;i<m;i++)mn[i]=m; for(int i=0;i<n;i++){ int x=R[i],y=C[i]; int st=min(x,y),ed=max(x,y); mn[ed]=min(mn[ed],st); } for(int i=0;i<m;i++){ if(mn[i]==m)continue; while(!s.empty()&&s.top().first>=mn[i])s.pop(); s.emplace(mn[i],i); } n=s.size(); for(int i=n;i>=1;i--){ tie(l[i],r[i])=s.top(); s.pop(); } for(int i=1;i<n;i++){ ll res=max(0,r[i]-l[i+1]+1); overlap[i]=res*res; } k=min(k,n); vector<vector<ll>> dp(n+1,vector<ll>(k+1,1e18)); dp[0][0]=0; for(int i=1;i<=n;i++){ for(int j=1;j<=k;j++){ for(int x=1;x<=i;x++){ ll sz=r[i]-l[x]+1; dp[i][j]=min(dp[i][j],dp[x-1][j-1]+sz*sz-overlap[i]); } } } ll ans=1e18; for(int i=0;i<=k;i++)ans=min(ans,dp[n][i]); return ans; }
#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...