NYOJ 106 背包问题

来源:互联网 发布:d3.v3.min.js引用 编辑:程序博客网 时间:2024/05/01 20:01

原题链接

这题只需要将所有物品按照降序排序,然后从上往下取就行,


附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;}


0 0