南阳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。

输出
输出每组测试数据中背包内的物品的价值和,每次输出占一行。
样例输入
1
3 15
5 10
2 8
3 9
样例输出
65
#include<cstdio>
#include<algorithm>
using namespace std;
struct bag
{
	int v;
	int w;
}arr[1010];
bool cmp(bag a,bag b)
{
	return a.v>b.v;
}
int main()
{
	int T,i;
	int n,m;
	scanf("%d",&T);

	while(T--)
	{
		scanf("%d%d",&n,&m);
		for(i=0;i<n;++i)
		{
			scanf("%d%d",&arr[i].v,&arr[i].w);	//这里是单位价值
		}
		sort(arr,arr+n,cmp);
		int max=m;
		int sum=0;
		for(i=0;i<n;++i)
		{
			if(arr[i].w<=max)
			{
				sum+=arr[i].v*arr[i].w;
				max-=arr[i].w;
			}
			else
			{
				sum+=max*arr[i].v;
				break;
			}
		}
		printf("%d\n",sum);
	}
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

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

南阳oj106 背包问题的相关文章

背包问题(南阳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

南阳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<

关于几个背包问题(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表示第

砝码问题之二(完全背包问题)

有一组砝码,重量互不相等,分别为m1.m2.m3……mn:每种砝码的数量有无限个. 现要用这些砝码去称物体的重量,给你一个重量n,请你判断有给定的砝码能否称出重量n. 现在给你一个正整数列表w和一个正整数n,列表w中的第i个元素w[i]表示第i种砝码的重量, n表示要你判断的重量.如果给定砝码能称出重量n,输出Yes,否则输出No. 例如,w=[2,5,11], n=9,则输出Yes(取两个2,一个5). w = [2, 5, 11] n = 9 S = [-1 for i in xrange(

2015南阳CCPC L - Huatuo&#39;s Medicine 水题

L - Huatuo's Medicine Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 无 Description Huatuo was a famous doctor. He use identical bottles to carry the medicine. There are different types of medicine. Huatuo put medicines into the bottles and chain these b

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分类之语言入门】80题题目+AC代码汇总

声明: 题目部分皆为南阳OJ题目. 代码部分包含AC代码(可能不止一个)和最优代码,大部分都是本人写的,并且大部分为c代码和少部分c++代码and极少java代码,但基本都是c语言知识点,没有太多差别,可能代码有的写的比较丑,毕竟知识有限. 语言入门部分题基本都较为简单,是学习编程入门的很好练习,也是ACM的第一步,入门的最佳方法,望认真对待. 本文由csdn-jtahstu原创,转载请注明出处,欢迎志同道合的朋友一起交流学习.本人QQ:1373758426和csdn博客地址. now begi

UESTC 31 饭卡(Card) --背包问题

背包问题. 思路:如果m<5,此时也不能消费,所以此时答案为m m>=5: 求出背包容量为m-5,买前n-1样便宜的菜(排个序)的最大价值(即最大消费,即消费完后剩余值最接近5)最后减去最大的那个菜的价格,就得到最小的余额. 代码: #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using n

动态规划之01背包问题(最易理解的讲解)

01背包问题,是用来介绍动态规划算法最经典的例子,网上关于01背包问题的讲解也很多,我写这篇文章力争做到用最简单的方式,最少的公式把01背包问题讲解透彻. 01背包的状态转换方程 f[i,j] = Max{ f[i-1,j-Wi]+Pi( j >= Wi ),  f[i-1,j] } f[i,j]表示在前i件物品中选择若干件放在承重为 j 的背包中,可以取得的最大价值. Pi表示第i件物品的价值. 决策:为了背包中物品总价值最大化,第 i件物品应该放入背包中吗 ? 题目描述: 有编号分别为a,b