제출 #1119005

#제출 시각아이디문제언어결과실행 시간메모리
1119005knot222쌀 창고 (IOI11_ricehub)C++14
17 / 100
307 ms262144 KiB
#include<bits/stdc++.h>
#define ll long long int
using namespace std;

ll dpl[5005][5005];
ll dpr[5005][5005];
int besthub(int R, int L, int X[], long long B) {
    for (int i=0;i<R;i++) {
        for (int j=0;j<=R;j++) {
            dpl[i][j] = LLONG_MAX/3;
            dpr[i][j] = LLONG_MAX/3;
            if (j==0) {
                dpl[i][0] = 0;
                dpr[i][0] = 0;
            }
            if (j==1) {
                dpr[i][1] = 0;
                dpr[i][1] = 0;
            }
        }
    }
    for (int i=1;i<R;i++) {
        for (int j=1;j<=R;j++) {
            dpl[i][j] = min(dpl[i-1][j-1]+(X[i]-X[i-1])*(j-1), LLONG_MAX/3);
        }
    }
    for (int i=R-2;i>=0;i--) {
        for (int j=1;j<=R;j++) {
            dpr[i][j] = min(dpr[i+1][j-1]+(X[i+1]-X[i])*(j-1), LLONG_MAX/3);
        }
    }
    int best = 0;
    for (int i=0;i<R;i++) {
        int l = R;
        int r = 0;
        while (l>=0&&r<=R) {
            while (dpl[i][l]+dpr[i][r+1]<=B && r<R-1) {
                r++;
            }
            if (dpl[i][l]+dpr[i][r]<=B) {
                best = max(best, l+r-1);
            } 
            l--;
        }
    }
    /*
    for (int i=0;i<6;i++) {
        for (int j=0;j<6;j++) {
            cout << dpl[i][j] << ' ';
        }
        cout << endl;
    }
    for (int i=0;i<6;i++) {
        for (int j=0;j<6;j++) {
            cout << dpr[i][j] << ' ';
        }
        cout << endl;
    }*/
    return best;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...