NYOJ 106 背包问题
原题链接
这题只需要将所有物品按照降序排序,然后从上往下取就行,
附ac代码:
#include <stdio.h> #include <stdlib.h> struct Node{ int v, w; }; int cmp(const void *a, const void *b){ return (*(Node *)b).v - (*(Node *)a).v; //按单位价值降序 } int main(){ int t, s, v, w, m; Node a[11], sum; scanf("%d", &t); while(t-- && scanf("%d%d", &s, &m)){ int i; for(i = 0; i != s; ++i) scanf("%d%d", &a[i].v, &a[i].w); qsort(a, s, sizeof(Node), cmp); for(i = sum.v = sum.w = 0; i != s; ++i){ if(a[i].w >= m - sum.w){ sum.v += (m - sum.w) * a[i].v; break; } else{ sum.w += a[i].w; sum.v += a[i].v * a[i].w; } } printf("%d\n", sum.v); } return 0; }