제출 #254628

#제출 시각아이디문제언어결과실행 시간메모리
254628Hehehe전선 연결 (IOI17_wiring)C++14
0 / 100
1 ms256 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;

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(sz(r) <= 200 && sz(b) <= 200){ return 0;
        
        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];
    }
    
    
    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[0] - red[sz(r)]);

    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...