제출 #89436

#제출 시각아이디문제언어결과실행 시간메모리
89436KLPPAliens (IOI16_aliens)C++14
12 / 100
169 ms2668 KiB
#include "aliens.h" #include<algorithm> #include<iostream> #include<vector> #include<stdio.h> #include<queue> using namespace std; #define INF 1000000000000000000 typedef pair<long long int,long long int> pii; typedef long long int lld; vector<pair<long long int,long long int> >arr; //long long int DP[50001][4001]; int p; lld Cost[1000000]; lld sq(lld x){ return x*x; } lld sq2(lld x){ if(x>0)return x*x; return 0; } void print(pair<lld,lld> a){ cout<<a.first<<" "<<a.second<<endl; } long long take_photos(int n, int m, int k, vector<int> r,vector<int> c) { pair<long long int,long long int>points[n]; for(int i=0;i<n;i++){ points[i]=pair<long long int,long long int>(r[i],c[i]); if(r[i]>c[i])swap(points[i].first,points[i].second); } for(int i=0;i<n;i++)points[i].second=-points[i].second; sort(points,points+n); for(int i=0;i<n;i++)points[i].second=-points[i].second; long long int cnts=-1; lld cntf=-1; for(int i=0;i<n;i++){ if(points[i].second>cnts && points[i].first>cntf){ cnts=points[i].second; cntf=points[i].first; arr.push_back(points[i]); //print(points[i]); } } p=arr.size(); for(int i=0;i<p;i++){ if(i==0)Cost[i]=0; else{ Cost[i]=sq2(-arr[i].first+arr[i-1].second+1); }//cout<<Cost[i]<<endl; } lld DP[p+1][k+1]; for(int photo=0;photo<=k;photo++){ for(int i=0;i<=p;i++){ DP[i][photo]=INF; } }DP[0][0]=0; for(int photo=1;photo<=k;photo++){ for(int i=1;i<=p;i++){ DP[i][photo]=min(DP[i][photo],DP[i][photo-1]); for(int j=0;j<i;j++){ DP[i][photo]=min(DP[i][photo],DP[j][photo-1]+Cost[j]+sq(arr[i-1].second-arr[j].first+1)); } } } return DP[p][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...