제출 #377420

#제출 시각아이디문제언어결과실행 시간메모리
377420reymontada61Pinball (JOI14_pinball)C++14
51 / 100
8 ms620 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long

int n, m;
const int MXN = 1005;
int l[MXN], r[MXN], to[MXN], c[MXN];

int lec[MXN], ric[MXN];

int MXE = LLONG_MAX / 2;

int ans = MXE;
bool can;

signed main() {

	cin >> m >> n;
	for (int i=1; i<=m; i++) {
		cin >> l[i] >> r[i] >> to[i] >> c[i];
	}
	
	for (int i=1; i<=m; i++) {
		if (l[i] == 1) {
			lec[i] = c[i];
		}
		else {
			lec[i] = MXE;
			for (int x=1; x<i; x++) {
				if (l[i] <= to[x] && to[x] <= r[i]) {
					lec[i] = min(lec[i], lec[x] + c[i]);
				}
			}
		}
		
		if (r[i] == n) {
			ric[i] = c[i];
		}
		else {
			ric[i] = MXE;
			for (int x=1; x<i; x++) {
				if (l[i] <= to[x] && to[x] <= r[i]) {
					ric[i] = min(ric[i], ric[x] + c[i]);
				}
			}
		}
		
		if (lec[i] == MXE || ric[i] == MXE) continue;
		
		can = true;
		ans = min(ans, lec[i] + ric[i] - c[i]);
			
	}
	
	if (can) cout << ans << endl;
	else cout << -1 << 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...