#include <bits/stdc++.h>
using namespace std;
#define int long long
int a[11],b[11],c[11],d[11];
signed main() {
int m, n; cin >> m >> n;
for (int i = 0; i < m; i++) {
cin >> a[i] >> b[i] >> c[i] >> d[i];
}
int maxnum=1<<m;
int mincost=1e18;
bool anypos=false;
for (int j = 1; j < maxnum; j++) {
int num=j;
int last=-1;
int mincov=1000000000;
int maxcov=-1;
int cost=0;
bool pos=true;
for (int i = m-1; i >= 0; i--) {
if (num%2 != 0) {
//cout << "including platform " << i << "\n";
if (last==-1) {
last=c[i];
mincov=a[i];
maxcov=b[i];
cost+=d[i];
//cout << "last, final is " << c[i] << "\n";
}
else {
if (c[i] < mincov) {
mincov=max(mincov, b[i]+1);
}
if (c[i] > maxcov) {
maxcov=min(maxcov, a[i]-1);
}
if (mincov <= c[i] && c[i] <= maxcov) {
mincov=min(mincov, a[i]);
maxcov=max(maxcov, b[i]);
//cout << "doesnt block, cov is now " << mincov << " " << maxcov << "\n";
}
cost+=d[i];
if (mincov > maxcov) {
pos=false;
break;
}
}
}
num/=2;
}
//bool cover1 = (last==1) && (mincov==1 || mincov==2) && (maxcov==n);
//bool cover2 = (last==n-1) && (mincov==1) && (maxcov==n || maxcov==1)
if (pos && mincov==1 && maxcov==n) {
anypos=true;
mincost=min(mincost, cost);
}
}
if (anypos) {
cout << mincost << "\n";
}
else {
cout << -1 << "\n";
}
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |