제출 #1305081

#제출 시각아이디문제언어결과실행 시간메모리
1305081lsjoPinball (JOI14_pinball)C++20
11 / 100
1 ms572 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...