Submission #101682

#TimeUsernameProblemLanguageResultExecution timeMemory
101682daniel920712Wiring (IOI17_wiring)C++14
0 / 100
1083 ms62460 KiB
#include <iostream> #include <stdio.h> #include <stdlib.h> #include <map> #include <utility> #include <vector> #include "wiring.h" using namespace std; map < pair < int ,int > , long long > DP; long long all[100005]={0}; long long F(int N,int M,vector < int > &r,vector < int > &b) { if(N==M) return all[N]; else { if(DP.find(make_pair(N,M))!=DP.end()) return DP[make_pair(N,M)]; long long t=abs(r[N]-b[M]),x=1e18; if(N) x=min(x,F(N-1,M,r,b)); if(M) x=min(x,F(N,M-1,r,b)); if(N&&M) x=min(x,F(N-1,M-1,r,b)); //printf("%d %d %lld\n",N,M,t+x); DP[make_pair(N,M)]=t+x; return t+x; } } long long min_total_length(vector < int > r, vector < int > b) { int N=r.size(); int M=b.size(); int i; for(i=0;i<min(N,M);i++) { if(i) all[i]+=all[i-1]; all[i]+=abs(r[i]-b[i]); } return F(N-1,M-1,r,b); }
#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...