【HDOJ】2111 Saving HDU

超水贪心,贴上来是因为例子太经典了,可以比较DP和贪心的不同。(部分背包和0/1背包)

#include <stdio.h>
#include <stdlib.h>

#define MAXNUM 105

int treas[MAXNUM][2];

int comp(const void *a, const void *b) {
    return *(int *)b - *(int *)a;
}

int main() {
    int v, n;
    int i, j, tmp;

    while (scanf("%d", &v)!=EOF && v) {
        scanf("%d", &n);
        for (i=0; i<n; ++i)
            scanf("%d %d", &treas[i][0], &treas[i][1]);

        qsort(treas, n, sizeof(int)*2, comp);

        tmp = 0;
        for (i=0; i<n; ++i) {
            if (v >= treas[i][1]) {
                tmp += treas[i][1] * treas[i][0];
                v -= treas[i][1];
            } else {
                tmp += v * treas[i][0];
                break;
            }
        }

        printf("%d\n", tmp);
    }

    return 0;
}

 

posted on 2014-03-08 17:13  Bombe  阅读(169)  评论(0)    收藏  举报

导航