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


posted on 2014-02-12 17:20  长木Qiu  阅读(103)  评论(0编辑  收藏  举报