Rezultati

Up. imeNalogaJezikRezultatČas oddaje
FRISPI-2017 Ribiči C 0/100Prekoračen čas (TLE) 11. maj '17 @ 18:18

Test Točke Porabljen spomin Porabljen čas Status
#1 3/3 1,480 MiB 0,000 s OK
#2 0/3 1,305 MiB 10,644 s Prekoračen čas
#3 0/3 1,305 MiB 10,650 s Prekoračen čas
#4 3/3 1,898 MiB 0,044 s OK
#5 4/4 1,906 MiB 0,038 s OK
#6 4/4 1,863 MiB 0,038 s OK
#7 4/4 1,863 MiB 0,038 s OK
#8 4/4 1,855 MiB 0,038 s OK
#9 0/4 1,672 MiB 10,654 s Prekoračen čas
#10 0/4 1,461 MiB 10,667 s Prekoračen čas
#11 0/4 1,652 MiB 10,647 s Prekoračen čas
#12 4/4 1,898 MiB 3,717 s OK
#13 4/4 1,863 MiB 0,190 s OK
#14 4/4 1,902 MiB 0,044 s OK
#15 0/4 1,672 MiB 10,641 s Prekoračen čas
#16 0/4 1,652 MiB 10,649 s Prekoračen čas
#17 0/4 1,672 MiB 10,643 s Prekoračen čas
#18 4/4 1,520 MiB 0,000 s OK
#19 0/4 1,289 MiB 10,651 s Prekoračen čas
#20 0/4 1,289 MiB 10,651 s Prekoračen čas
#21 4/4 1,520 MiB 0,000 s OK
#22 0/4 1,652 MiB 10,655 s Prekoračen čas
#23 0/4 1,652 MiB 10,653 s Prekoračen čas
#24 0/4 1,324 MiB 10,657 s Prekoračen čas
#25 0/4 1,301 MiB 10,657 s Prekoračen čas
#26 0/4 1,324 MiB 10,657 s Prekoračen čas

Ocenjevani program (riba.c):
#include <stdio.h>
#include <stdlib.h>

int N, D, K;
int *ribe;


int sestej(int index){
    int sum = 0;
    for(int i = 0; i < D; i++){
        sum += *(ribe+i+index);
    }
    return sum;
}

int search(int start, int level){
    int max = 0;
    int x = 0;
    if(level == 1){
        
        for(int i = start; i <= N-D; i++){
            x = sestej(i);
            if (x > max){
                max = x;
            }
        }
        return max;
    }
    else{
         
        for (int i = start; i <= N - level*D; i++){
            x = sestej(i) + search(i+D, level-1);
            if (x > max){
                max = x;
            }
        }
        
        return max;
    }
}




int main(){
    
    
    scanf("%d %d %d", &N, &D, &K);
    //poisci max vsoto K Dteric razlicnih zaporednih stevil
    ribe = (int *)malloc(N*sizeof(int));
    for(int i = 0; i < N; i++){
        //dela read
        scanf("%d", (ribe+i));
    }
    
    if (K*D >= N){
        int sum = 0;
        for(int i = 0; i < N; i++){
        
             sum += *(ribe+i);
        }
        printf("%d", sum);
    }
    else{
        int sol = search(0, K);
        printf("%d", sol);
        
        //printf("\n%d", sestej(2));
        
        //int sol[K];
        //int g = 1;
        //int max = 0;
        
        //default state: (prekrivanje se ne splaca, razen ce lahko zavzames vse)
        /*izracuna default max
        for(int i = 0; i < K; i++){
            sol[i] = g;
            max += sestej(g, D, ribe);
            g += D;
        }*/
        
        /*
        //ali dela ideja, naceloma rekurzija?
        int delno = 0;
        for(int i = 1; i <= N - (K)*D; i++){
            delno += sestej(i, D, ribe);
            for(int j = i+D; j <= N - (K-1)*D; j++){
                delno += sestej(j, D, ribe);
                if ()
            }
            
            
        }*/
        
        
    }
    
    return 0;
}