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);s表示有s个物品。接下来的s行每行有两个正整数v,w。

输出
输出每组测试数据中背包内的物品的价值和,每次输出占一行。
样例输入
1
3 15
5 10
2 8
3 9
样例输出
65
AC-code:
#include<stdio.h>
#include<algorithm>
using namespace std;
struct bag
{
	int v;
	int w;
};

bool cmp(bag a,bag b)
{
	return a.v>b.v;
}

int main()
{
	int sum,s,m,i,max,n;
	bag a[100];
	scanf("%d",&n);
	while(n--)
	{
		scanf("%d%d",&s,&m);
		for(i=0;i<s;i++)
			scanf("%d%d",&a[i].v,&a[i].w);
		max=m;
		sum=0;
		sort(a,a+s,cmp);
		for(i=0;i<s;i++)
		{
			if(a[i].w<=max)
			{
				sum+=a[i].v*a[i].w;
				max-=a[i].w;
			}
			else
			{
				sum+=a[i].v*max;
				break;
			}
		}
		printf("%d\n",sum);
	}
	return 0;
}

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

时间: 2024-09-28 19:02:25

NYOJ~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

分数背包问题(贪心算法)

#include<iostream> #include<iterator> #include<vector> #include<algorithm> using namespace std; /* *分数背包问题(贪心算法) */ struct goods { double value;//物品的价值 double weight;//物品的重量 double ratio;//物品的性价比 double in;//物品装入背包的重量 int index;//物

背包问题(贪心算法)

贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解. 贪心算法还是比较好理解的一个算法,以前我也是这样认为的,感觉贪心就是每一步都做到最优解就可以了,但是后来结合问题发现自己的理解存在着一些问题.贪心算法比较经典的题目之一就是单源最短路径问题,这个问题在一些步骤上面我想了很久,有些细节想不通.这个问题以后有机会再讲.本次讲一讲背包问题. 背包问题就是有若干物品,每个物品有自己的价值和重量.背包有总重

JAVA算法基础-贪心算法

前言 学无止境.算法博大精深啊,一个贪心算法里面就隐含了这么多不同的场景实现,每个场景下的算法就有多种不同的实现,个人写法不一也成就了各种不同的漂亮算法,看了这些实现,也让我开拓了思维,这个世界的方案永远没有最完美的只有最合适的- ! 1.贪心算法概念 贪心算法也叫贪婪算法,当然叫法随意.主要目的是在问题求解时,做出最正确的判断= =,这不是贪心是啥?在计算机工程领域当中,就是说不考虑整体最优算法而是从局部做到最优解.当然贪心是算法不能对所有的问题都能得到整体都最优解,但对多数个问题还是能得到近

野生前端的数据结构练习(12)贪心算法

参考代码可见:https://github.com/dashnowords/blogs/tree/master/Structure/GreedyAlogrithm 一.贪心算法 贪心算法属于比较简单的算法,它总是会选择当下最优解,而不去考虑单次递归时是否会对未来造成影响,也就是说不考虑得到的解是否是全局最优.在很多实际问题中,寻找全局最优解的代价是非常大的,这时候就可以通过求次优解来解决问题,这种思想其实在软件工程中很常见,例如React中著名的DOM Diff算法中需要对比两棵DOM树,树的完

贪心算法练习题:部分背包问题

/*----------------------------------------------------- 有n个物体,第i个物体的重量是wi,价值为vi, 选若干个物体,使得在总重量不超过c的情况下让总价值尽量高. 这里每个物体都可以只取走一部分,价值和重量按比例计算. 输入: 第一行输入两个整数表示n和c. 第2到第n+1行每行两个整数分别表示wi和vi. 输出: 第一行输出所选物品的总价值v和总重量w以及所选物品的种类数num.两两之间用空格分隔. 第二行到第n+1行按照输入物品的顺序

关于贪心算法和动态规划的学习 - 背包问题为例

说到背包问题,我看到了很多分类,不同的类似问题,有不一样的解法,看到的最多的两种方式是贪心算法和动态规划,于我来说,更迫切的应该是要认识一下,这些算法的区别和相同的地方,所以这节就来找资料学习一下贪心算法和动态规划的区别. 这是找到的一个对我帮助最大的,源地址:https://www.cnblogs.com/Renyi-Fan/p/7741089.html 看之前先摘一下这几个解决方案的区别:摘自网上 "所以一个问题,该用递推.贪心.搜索还是动态规划,完全是由这个问题本身阶段间状态的转移方式决定

贪心算法之背包问题

贪婪算法的基本思想:通过一系列步骤来构造问题的解,每一步都是对已构造的部分解的一个扩展,直到获得问题的完整解. 贪婪算法中,每一步“贪婪地” 选择最好的部分解,但不顾及这样选择对整体的影响(局部最优),因此得到的全局解不一定最好的解,但对许多问题它能产生整体最优解. 具体算法描述: public static void Greedy()        {            float cu = c;            int temp = 0;            int i = 0;

数据结构之贪心算法(背包问题的思考)-(十)

贪心策略.关于贪心算法的思考,思考过程都放在代码中了. package com.lip.datastructure; /** *贪心算法:装箱问题的思考 * @author Lip *装箱问题可以是时间调问题的延伸,当一个箱子没有容积限制,那么就是时间调度问题 *在时间调度问题中:存在两个可以讨论的问题.1.平均最短时间 2.总的最短时间 *这两个问题都和装箱问题中问题如此类似. */ /* * 上面是我理解的装箱问题,本来是想说背包问题的 * 背包问题的描述:有N件物品和一个容量为V的背包.第