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

 

目录
相关文章
|
算法 C++
剑指offer(C++)-JZ70:矩形覆盖(算法-动态规划)
剑指offer(C++)-JZ70:矩形覆盖(算法-动态规划)
51nod 1711 平均数(二分 + 树状数组好题)
51nod 1711 平均数(二分 + 树状数组好题)
94 0
HDU7018.Banzhuan(计算几何+贪心)
HDU7018.Banzhuan(计算几何+贪心)
103 0
HDU7018.Banzhuan(计算几何+贪心)
|
算法
POJ 3154 Graveyard【多解,数论,贪心】
Graveyard Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 1707   Accepted: 860   Special Judge Description Prog...
1244 0
|
Java 机器学习/深度学习
UESTC 30 &&HDU 2544最短路【Floyd求解裸题】
最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 65817    Accepted Submission(s): 28794 Problem Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。
1144 0
|
Windows Perl
Codeforces 626G Raffles(贪心+线段树)
G. Raffles time limit per test:5 seconds memory limit per test:256 megabytes input:standard input output:standard output Johnny is at a carnival which has n raffles.
1281 0
【OJ】贪心法 (区间问题——木棒)1129/
题目链接:点击打开链接 /* 贪心法 (区间问题——木棒)1129/ */ #include #include #include using namespace std; const int maxn=5010; typedef pair P; pairit...
977 0