Submission #8209

#TimeUsernameProblemLanguageResultExecution timeMemory
8209baneling100스트랩 (JOI14_straps)C++98
0 / 100
0 ms1120 KiB
#include <stdio.h>
#include <algorithm>
#define INF 0x7fffffff

using namespace std;

int N, M, A[2001], B[2001][2], D[2001], Ans=-INF;

void input(void) {

    int i, T, X, Y;

    scanf("%d",&T);
    for(i=1 ; i<=T ; i++) {
        scanf("%d %d",&X,&Y);
        if(X) {
            B[++M][0]=X-1;
            B[M][1]=Y;
        }
        else
            A[++N]=Y;
    }
    sort(A+1,A+N+1);
    for(i=N-1 ; i>=1 ; i--)
        A[i]+=A[i+1];
}

void process(void) {

    int i, j, k;

    for(i=2 ; i<=N ; i++)
        D[i]=-INF;
    for(i=1 ; i<=M ; i++)
        for(j=N ; j>=1 ; j--) {
            k=min(j+B[i][0],N);
            if(D[k]<D[j]+B[i][1] && D[j]!=-INF)
                D[k]=D[j]+B[i][1];
        }
    for(i=N-1 ; i>=0 ; i--)
        if(D[i]<D[i+1])
            D[i]=D[i+1];
    for(i=0 ; i<=N ; i++)
        if(Ans<D[i]+A[N-i+1])
            Ans=D[i]+A[N-i+1];
}

void output(void) {

    printf("%d",Ans);
}

int main(void) {

    input();
    process();
    output();

    return 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...