问题 F: 背包问题

题目描述

现在有很多物品(它们是可以分割的),我们知道它们每个物品的单位重量的价值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<stdio.h>
 2 #include<stdlib.h>
 3 typedef struct NODE
 4 {
 5     int v , w;
 6 }Node;
 7 Node array[11];
 8
 9 int comp(const void *a , const void * b)
10 {
11     return (*(Node *)b).v - (*(Node *)a).v ;
12 }
13 int main()
14 {
15     int i;
16
17     scanf("%d" , &i);
18     while(i--)
19     {
20         int a , b , j, sum = 0;
21         scanf("%d %d" , &a , &b);
22         for(j = 0 ; j < a ; j++)
23         {
24             scanf("%d %d" , &array[j].v , & array[j].w );
25         }
26         qsort(array , a , sizeof(Node) , comp);
27         for(j = 0 ; j < a ; j++)
28         {
29             if(array[j].w > b)
30             {
31                 sum += b * array[j].v ;
32                 break;
33             }
34             b -= array[j].w;
35             sum += array[j].v * array[j].w ;
36         }
37         printf("%d\n" , sum);
38     }
39     return 0;
40 }          

时间: 2024-10-10 20:15:34

问题 F: 背包问题的相关文章

过分过分进货价获国家

http://f.dangdang.com/group/24554/3491082/http://f.dangdang.com/group/24554/3491087/http://f.dangdang.com/group/24554/3491094/http://f.dangdang.com/group/24554/3491099/http://f.dangdang.com/group/24554/3491105/http://f.dangdang.com/group/24554/349111

我们找个地方看好戏

http://v.qq.com/page/f/y/4/m041433ssun.html http://v.qq.com/page/f/y/4/m041433ssun.html http://v.qq.com/page/f/y/4/m04143o3lhg.html http://v.qq.com/page/f/y/4/m04144675h3.html http://v.qq.com/page/f/y/4/m04144k1k1j.html http://v.qq.com/page/f/y/4/m04

【算法系列学习】[kuangbin带你飞]专题十二 基础DP1 F - Piggy-Bank 【完全背包问题】

https://vjudge.net/contest/68966#problem/F http://blog.csdn.net/libin56842/article/details/9048173 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<string> 5 #include<algorithm> 6 #include<cmath> 7

动态规划之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

0-1背包问题

[问题] 有一个贼在偷窃一家商店时发现有N件物品:第i件物品值pi元,重wi磅(1≤i≤N),且都是整数. 他希望带走的东西越值钱越好,但他的背包中最多能装下M磅的东西(整数). 如果每件物品或被带走或被留下,小偷应该带走哪几样东西? [算法解析] 令f(i,y) 表示容量为y,物品i,i+1,···,n 的优化效益值,按优化原理可列递归关系如下: 初始背包问题的递归方程 f(1,c)=max{f(2,c), f(2,c-w1)+p1} 迭代计算从f(n, *)开始((1)式)然后应用(2)式递

1616 疯狂的采药(完全背包问题)

难度:普及- 题目类型:动规 提交次数:1 涉及知识:背包动规 题目背景 此题为NOIP2005普及组第三题的疯狂版. 此题为纪念LiYuxiang而生. 题目描述 LiYuxiang是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同种类的草药,采每一种都需要一些时间,每一种也有它自身的价值.我会给你一段时间,在这段时间里,你可以采到一些草药.如

背包问题

给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高. 使用动态规划算法解答 1 import java.util.Scanner; 2 3 public class 一维数组解背包问题 { 4 public static void main(String[] args) { 5 Scanner sc = new Scanner(System.in); 6 int W = sc.nextInt(), n = sc.nextInt();//W=背包容

bzoj3163: [Heoi2013]Eden的新背包问题

Description “寄没有地址的信,这样的情绪有种距离,你放着谁的歌曲,是怎样的心心静,能不能说给我听.”失忆的Eden总想努力地回忆起过去,然而总是只能清晰地记得那种思念的感觉,却不能回忆起她的音容笑貌. 记忆中,她总是喜欢给Eden出谜题:在 valentine’s day 的夜晚,两人在闹市中闲逛时,望着礼品店里精巧玲珑的各式玩偶,她突发奇想,问了 Eden这样的一个问题:有n个玩偶,每个玩偶有对应的价值.价钱,每个玩偶都可以被买有限次,在携带的价钱m固定的情况下,如何选择买哪些玩偶

01背包问题:POJ3624

背包问题是动态规划中的经典问题,而01背包问题是最基本的背包问题,也是最需要深刻理解的,否则何谈复杂的背包问题. POJ3624是一道纯粹的01背包问题,在此,加入新的要求:输出放入物品的方案. 我们的数组基于这样一种假设: totalN表示物品的种类,totalW表示背包的容量 w[i]表示第i件物品的重量,d[i]表示第i件物品的价值. F(i,j)表示前i件物品放入容量为j的背包中,背包内物品的最大价值. F(i,j) = max{ F(i-1,j) , F(i-1,j-w[i])+d[i