제출 #68000

#제출 시각아이디문제언어결과실행 시간메모리
68000KLPP고대 책들 (IOI17_books)C++14
22 / 100
634 ms42840 KiB
#include "books.h" #include<iostream> #include<vector> #include<queue> using namespace std; typedef long long lld; int arr[1000000]; int n; int maxa,maxb; lld DP[1000][1000]; lld computevalue(int i, int j){ //cout<<i<<" "<<j<<endl; if(i<=maxa && maxb<=j)return 0; if(DP[i][j]!=-1)return DP[i][j]; int start=i; int end=j; int newstart=start; int newend=end; do{ //cout<<start<<" "<<end<<endl; start=newstart; end=newend; for(int x=start;x<=end;x++){ newstart=min(newstart,arr[x]); newend=max(newend,arr[x]); } }while(!(newstart==start && newend==end)); DP[i][j]=1000000000000000000; if(start>maxa){ DP[i][j]=min(DP[i][j],computevalue(start-1,end)+2); } else if(end<maxb){ DP[i][j]=min(DP[i][j],computevalue(start,end+1)+2); }else DP[i][j]=0; return DP[i][j]; } lld abs(lld x){ if(x>0)return x; return -x; } long long minimum_walk(std::vector<int> p, int s) { n=p.size(); for(int i=0;i<n;i++){ arr[i]=p[i]; } maxa=n; for(int i=0;i<n;i++){ if(p[i]!=i){ maxa=i; i=n; } } maxb=-1; for(int i=n-1;i>-1;i--){ if(p[i]!=i){ maxb=i; i=-1; } } for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ DP[i][j]=-1; } } //cout<<maxa<<" "<<maxb<<endl; lld ans=0; for(int i=0;i<n;i++)ans+=abs(p[i]-i); //cout<<ans<<endl; ans+=computevalue(s,s); 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...