Quick actions

cmd+k|ctrl+k

Navigation

Languages

12018

Snippet info

Language

C

Visibility

public

Author

vghjm

Created

2019-08-14T04:34:50Z

Updated

2019-08-14T04:34:50Z

#include <stdio.h>
#include <limits.h>

int N;
int M;
int sub[100];
int P;
int L;
int need_point[100];

int find_nth(int n){
    int max;
    int pos;
    int point = 1;
    for(int i=0; i<n; i++){
        max = INT_MIN;
        pos = -1;
        for(int j=0; j<P; j++){
            if(sub[j] >= max && sub[j] != -1){
                max = sub[j];
                pos = j;
            }
        }
        
        if(pos==-1) return 1;
        point = sub[pos];
        sub[pos] = -1;
        if(i==n-1) return point;
        
    }
    
    return 1;
}

int lowest(){
    int min = INT_MAX;
    int pos = -1;
    for(int i=0; i<N; i++){
        if(need_point[i] < min && need_point[i] != -1){
            min = need_point[i];
            pos = i;
        }
    }
    
    if(pos==-1) return 0;
    need_point[pos] =-1;
    
    return min;
}

int main(void) {
    
    scanf("%d %d", &N, &M);
    for(int i=0; i<N; i++){
        scanf("%d %d", &P, &L);
        for(int j=0; j<P; j++){
            scanf("%d", &sub[j]);
        }
        need_point[i] = find_nth(L);
    }
    
    /*
    printf("Point\n> ");
    for(int i=0; i<N; i++){
        printf(" %d ", need_point[i]);
    }
    printf("\n");
    */
    
    int count=0;
    int val;
    while((val = lowest())){
        if(M>=val){
            M-=val;
            count++;
        }else {
            break;
        }
    }
    
    //printf("\ncount: %d\n", count);
    printf("%d", count);
    
    return 0;
}
INFO