제출 #425790

#제출 시각아이디문제언어결과실행 시간메모리
425790Hazem전선 연결 (IOI17_wiring)C++14
0 / 100
1 ms204 KiB
#include "wiring.h" #include <bits/stdc++.h> using namespace std; #define LL long long const LL INF = 1e9; const LL LINF = 1e18; const int N = 2e3+10; LL dp[N][N][2][2]; LL n,m; vector<LL>R,B; LL solve(int i,int j,int t1,int t2){ if(i==n-1&&j==m-1&&t1&&t2) return 0; if(dp[i][j][t1][t2]!=-1) return dp[i][j][t1][t2]; dp[i][j][t1][t2] = LINF; if(t1&&i<n-1) dp[i][j][t1][t2] = min(dp[i][j][t1][t2],solve(i+1,j,0,t2)); if(t2&&j<m-1) dp[i][j][t1][t2] = min(dp[i][j][t1][t2],solve(i,j+1,t1,0)); dp[i][j][t1][t2] = min(dp[i][j][t1][t2],solve(i,j,1,1)+abs(R[i]-B[j])); return dp[i][j][t1][t2]; } long long min_total_length(std::vector<int> r, std::vector<int> b) { n = r.size(),m = b.size(); LL ret = 0; for(LL i=0;i<n-1;i++) ret += (r[i+1]-r[i])*(i+1); for(LL i=m-1;i>=1;i--) ret += (b[i]-b[i-1])*(m-i); ret += (b[0]-r[n-1])*min(n,m); if(n>m) for(int i=n-1;i>=m;i--) ret += b[0]-r[i]; if(m>n) for(int i=0;i<m-n;i++) ret += b[i]-r[n-1]; return ret; }
#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...