제출 #106226

#제출 시각아이디문제언어결과실행 시간메모리
106226SecretAgent007전선 연결 (IOI17_wiring)C++17
20 / 100
161 ms2168 KiB
#include <bits/stdc++.h> #include "wiring.h" using namespace std; vector< vector< int > > memo; int dp(int n, int m, vector< int > red, vector< int > blue){ if(n < 0 || m < 0){ return INT_MAX; } if(n == 0 && m == 0){ return memo[n][m] = abs(red[n]-blue[m]); } if(memo[n][m] != -1) return memo[n][m]; return memo[n][m] = min(dp(n-1, m-1, red, blue), min(dp(n-1,m,red, blue), dp(n,m-1,red,blue))) + abs(red[n]-blue[m]); } long long min_total_length (vector <int> red, vector <int> blue) { int n = red.size(); int m = blue.size(); if(n < 500 && m < 500){ memo.resize(n, vector<int>(m)); for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ memo[i][j] = -1; } } return dp(n-1,m-1,red,blue); } long long tot = 0; int f = 0; int s = 0; while(f < n && s < m){ tot += blue[s]-red[f]; s++; f++; } while(f < n){ tot += blue[0]-red[f]; f++; } while(s < m){ tot += blue[s]-red.back(); s++; } return tot; } /* signed main(){ ios::sync_with_stdio(false); cin.tie(0); int n, m; cin >> n >> m; vector< int > red(n); vector< int > blue(m); for(int i = 0; i < n; i++){ cin >> red[i]; } for(int i = 0; i < m; i++){ cin >> blue[i]; } cout << min_total_length(red, blue) << endl; }*/
#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...