제출 #254647

#제출 시각아이디문제언어결과실행 시간메모리
254647Hehehe전선 연결 (IOI17_wiring)C++14
20 / 100
45 ms32000 KiB
#include<bits/stdc++.h> //:3 using namespace std; typedef long long ll; #define all(a) (a).begin(), (a).end() #define ff first #define ss second #define pb push_back #define mp make_pair #define rc(s) return cout<<s,0 #define pi pair <int, int> #define sz(x) (int)((x).size()) #include "wiring.h" const int N = 2e3 + 11; const ll INF64 = 3e18 + 1; ll dp[N][N]; ll min_total_length(vector<int> r, vector<int> b){ vector<ll>red, blue; red.push_back(0); blue.push_back(0); for(auto it : r)red.push_back((ll)it); for(auto it : b)blue.push_back((ll)it); if(red[sz(r)] <= blue[1]){ ll ans = 0; for(int i = 1; i < sz(red); i++){ ans += (red[sz(red) - 1] - red[i]); } for(int i = 1; i < sz(blue); i++){ ans += (blue[i] - blue[1]); } ans += max(sz(r), sz(b))*(blue[1] - red[sz(r)]); return ans; } if(sz(r) <= 200 && sz(b) <= 200){ memset(dp, 0x3f, sizeof(dp)); dp[0][0] = 0; for(int i = 1; i < sz(red); i++){ for(int j = 1; j < sz(blue); j++){ dp[i][j] = min({dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]}) + abs(red[i] - blue[j]); } } return dp[sz(red) - 1][sz(blue) - 1]; } int ans = 0; for(int l = 1; l <= sz(r) + sz(b); l += 7){ for(int i = 0; i <= 7; i++){ for(int j = 0; j <= 7; j++){ dp[i][j] = INF64; } } dp[0][0] = 0; for(int i = 1; i <= 7; i++){ for(int j = 1; j <= 7; j++){ dp[i][j] = min({dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]}) + abs(red[l + i - 1] - blue[l + j - 1]); } } ans += dp[7][7]; } 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...