南阳106--背包问题

背包问题

时间限制: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
来源
[苗栋栋]原创
上传者
苗栋栋

 1 #include <cstdio>
 2 #include <algorithm>
 3 using namespace std;
 4
 5 struct ac
 6 {
 7     int a, b;
 8 } num[15];
 9
10 bool cmp(ac a, ac b)
11 {
12     return a.a > b.a;
13  }
14
15 int main()
16 {
17     int t;
18     scanf("%d", &t);
19     while(t--)
20     {
21         int n, m;
22         scanf("%d %d", &n, &m);
23         for(int i=0; i<n; i++)
24             scanf("%d %d", &num[i].a, &num[i].b);
25         sort(num, num+n, cmp);
26         int sum = 0, total = 0;
27         for(int i=0; i<m; i++)
28         {
29             sum += num[i].b; total += num[i].a*num[i].b;
30             //printf("%d %d\n", sum, total);
31             if(sum > m)
32             {
33                 total -= (sum - m) * num[i].a;
34                 break;
35             }
36             if(sum == m)
37                 break;
38         }
39         printf("%d\n", total);
40     }
41     return 0;
42 } 

时间: 2024-10-10 21:18:10

南阳106--背包问题的相关文章

NYOJ 106 背包问题

背包问题 时间限制: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

南阳OJ 背包问题

?? /*背包问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描写叙述 如今有非常多物品(它们是能够切割的),我们知道它们每一个物品的单位重量的价值v和 重量w(1<=v,w<=10):假设给你一个背包它能容纳的重量为m(10<=m<=20), 你所要做的就是把物品装到背包里,使背包里的物品的价值总和最大. 输入第一行输入一个正整数n(1<=n<=5),表示有n组測试数据: 随后有n測试数据.每组測试数据的第一行有两个正整数s,m(1<

NYOJ~106~背包问题~贪心算法~

背包问题 时间限制: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

南阳oj106 背包问题

描述 现在有很多物品(它们是可以分割的),我们知道它们每个物品的单位重量的价值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. 输出 输出每组测试数据

步步为营(五)贪心(4)部分背包问题

部分背包问题虽说是归于背包问题的一种,而且背包问题大多数是通过动态规划的出的结果,但是贪心算法解部分背包,不管是思想还是操作上来说,都是非常简单的. 首先,我们来看一下什么叫做部分背包. 有N个商品,每个商品的重量为WI,价格为:PI,现有一个背包,最多能装M的重量. 其中(0<=I< N,0< wi<.M). 问:怎样装能使包中装入的商品价值最高(对于每个商品可以只装该商品的一部分) 那我们就来分析一下条件:: 1. 商品重量不是无限的. 那就说明我们不能只拿一种东西,大多数情况

NYOJ-103-背包问题

题目地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=106 背包问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现在有很多物品(它们是可以分割的),我们知道它们每个物品的单位重量的价值v和重量w(1<=v,w<=10):如果给你一个背包它能容纳的重量为m(10<=m<=20),你所要做的就是把物品装到背包里,使背包里的物品的价值总和最大. 输入 第一行输入一个正整数n(1<=n<

背包问题(南阳oj106)(贪心)

背包问题 时间限制: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

背包问题--nyoj题目106

背包问题 时间限制: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)

关于几个背包问题(C语言)

个人新学的几个背包问题,做下记录总结.(参考博客:http://blog.csdn.net/mu399/article/details/7722810  以及 http://blog.csdn.net/u013174702/article/details/45741395) (1)01背包: 01背包的状态转换方程 f[i,j] = Max{ f[i-1,j-Wi]+Pi,  f[i-1,j] } f[i,j]表示在前i件物品中选择若干件放在承重为 j 的背包中,可以取得的最大价值. Pi表示第

hdu 5677 ztr loves substring(manacher,背包问题)

1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 5 /** 6 7 8 manacher 处理出回文串长度 9 p[i]:半径 10 11 if(s[i] == '#' && p[i] == 1) continue; 12 else{ 13 int tmp = p[i] / 2; 14 if(s[i] == '#') for(int i = 2 ; i <= tmp ;