您的位置:首页 > 其它

NYOJ 106 背包问题

2014-02-12 17:20 267 查看

原题链接

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

附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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  NYOJ