제출 #1347595

#제출 시각아이디문제언어결과실행 시간메모리
1347595inesfi전선 연결 (IOI17_wiring)C++20
7 / 100
12 ms3244 KiB
#include "wiring.h"
#include<bits/stdc++.h>
using namespace std;

#define ll long long

const ll TAILLEMAXI=202, INFINI=1e18;
vector<int> rouges, bleus;
ll memo[TAILLEMAXI][TAILLEMAXI];
int nbrouges, nbbleus;

ll dp(int r, int b){
	if (memo[r][b]!=-1){
		return memo[r][b];
	}
	if (r==nbrouges-1 and b==nbbleus-1){
		memo[r][b]=abs(rouges[r]-bleus[b]);
		return memo[r][b];
	}
	ll val=INFINI;
	if (r!=nbrouges-1){
		val=min(val, dp(r+1, b));
	}
	if (b!=nbbleus-1){
		val=min(val, dp(r, b+1));
	}
	if (b!=nbbleus-1 and r!=nbrouges-1){
		val=min(val, dp(r+1, b+1));
	}
	memo[r][b]=val+abs(rouges[r]-bleus[b]);
	return memo[r][b];
}

ll min_total_length(vector<int> r, vector<int> b) {
	rouges = r;
	bleus = b;
	nbrouges = rouges.size();
	nbbleus = bleus.size();
	for (int i=0;i<=nbrouges;i++){
		for (int j=0;j<nbbleus;j++){
			memo[i][j]=-1;
		}
	}
	return dp(0,0);
}
#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...