[ create a new paste ] login | about

Link: http://codepad.org/eCtzEznU    [ raw code | fork ]

C, pasted on Sep 11:
#include <stdio.h>

#define MAX (3000000)

int m, n;
int q[50];
int r[50];
int dp[MAX] = {0};
int tp[MAX] = {0};

int main(void) {
    int i, j;
    int min = 0, t_q, t_r;
    int *x, *y, *z;
    
    scanf("%d", &m);
    scanf("%d", &n);
       
    for (i = 0; i < n; i++) {
        scanf("%d %d", &q[i], &r[i]);
        min += r[i];
    }
    
    x = dp;
    y = tp;
    for (i = 0; i < n; i++) {
        for (j = 0; j < MAX; j++) y[j] = x[j];
        for (j = 0; (j + q[i]) < MAX; j++) {
            if ((x[j] == 0) && (j > 0)) continue;
            t_q = j + q[i];
            t_r = x[j] + r[i];
            if (t_r < x[t_q]) {
                y[t_q] = t_r;
            } else if (x[t_q] == 0) {
                y[t_q] = t_r;
            } else {
                y[t_q] = x[t_q];
            }
            if ((t_q >= m) && (y[t_q] < min)) {
                min = y[t_q];
            }
        }
        z = x;
        x = y;
        y = z;
    }
    
    printf("%d\n", min);
    
    return 0;
}


Create a new paste based on this one


Comments: