NYOJ 106(贪心)

简介:   背包问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述现在有很多物品(它们是可以分割的),我们知道它们每个物品的单位重量的价值v和重量w(1

 

背包问题

时间限制: 3000 ms  |  内存限制: 65535 KB
难度: 3
 
描述
现在有很多物品(它们是可以分割的),我们知道它们每个物品的单位重量的价值v和重量w(1<=v,w<=10);如果给你一个背包它能容纳的重量为m(10<=m<=20),你所要做的就是把物品装到背包里,使背包里的物品的价值总和最大。
 
输入
第一行输入一个正整数n(1<=n<=5),表示有n组测试数据;
随后有n测试数据,每组测试数据的第一行有两个正整数s,m(1<=s<=10);s表示有s个物品。接下来的s行每行有两个正整数v,w。
输出
输出每组测试数据中背包内的物品的价值和,每次输出占一行。
样例输入
1
3 15
5 10
2 8
3 9
样例输出
65


注意:因为物品可拆分,所以不必考虑单位价值相等时那个物品排前哪个后的问题,即不必二级排序

#include<stdio.h> typedef struct data { int w; int v; }data; int cmp(const void *a,const void *b) { return ((data*)a)->v-((data*)b)->v; } int main() { data a[10]; int T,v,w,sum,s,m; scanf("%d",&T); while(T--) { sum=0; scanf("%d%d",&s,&m); for(int i=0;i<s;i++) scanf("%d%d",&a[i].v,&a[i].w); qsort(a,s,sizeof(data),cmp); for(int i=s-1;m>0;i--) if(a[i].w<=m) { sum+=a[i].v*a[i].w; m-=a[i].w; } else { sum+=m*a[i].v; m=0; } printf("%d\n",sum); } return 0; }

 

目录
相关文章
|
7月前
|
人工智能 Kubernetes 算法
贪心算法 - 常见的问题总结(二)
贪心算法 - 常见的问题总结(二)
|
7月前
|
人工智能 算法 NoSQL
贪心算法 - 常见的问题总结(一)
贪心算法 - 常见的问题总结(一)
|
算法 Java 调度
贪心算法详解
贪心算法详解
164 0
|
算法
【贪心算法】初步介绍
【贪心算法】初步介绍
85 0
|
算法 调度
贪心算法小解
贪心算法小解
62 0
|
机器学习/深度学习 算法 C++
简单的贪心
简单的贪心
66 0
|
算法
贪心题:股票买卖 II
贪心题:股票买卖 II
66 0
|
人工智能 算法
贪心算法的证明题
贪心算法的证明题
220 0
|
机器学习/深度学习 存储 算法
贪心算法
贪心算法
377 0
贪心算法