제출 #425839

#제출 시각아이디문제언어결과실행 시간메모리
425839Hazem전선 연결 (IOI17_wiring)C++14
13 / 100
33 ms6072 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(); for(auto x:r) R.push_back(x); for(auto x:b) B.push_back(x); 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); ret += (B[0]-R[n-1])*(max(n,m)-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...