P2240 【深基12.例1】部分背包问题
P2240 【深基12.例1】部分背包问题
题目描述
阿里巴巴走进了装满宝藏的藏宝洞。藏宝洞里面有 N(N \le 100)N(N≤100) 堆金币,第 ii 堆金币的总重量和总价值分别是 m_i,v_i(1\le m_i,v_i \le 100)m**i,v**i(1≤m**i,v**i≤100)。阿里巴巴有一个承重量为 T(T \le 1000)T(T≤1000) 的背包,但并没办法将全部的金币都装进去。他想装走尽可能多价值的金币。所有金币都可以随意分割,分割完的金币重量价值比(也就是单位价格)不变。请问阿里巴巴最多可以拿走多少价值的金币?
输入格式
第一行两个整数 N、T
接下来 N 行,每行两个整数 m_i,v_im**i,v**i
输出格式
一个整数表示答案,输出两位小数
输入输出样例
输入 #1
4 50
10 60
20 100
30 120
15 45
输出 #1
240.00
//P2240 【深基12.例1】部分背包问题
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int findmax(double*,int);
int main()
{
int mass[102];
int money[102];
double rate[102];
int number,mass_sum,max,count;//count用于避开背包空间没用完的情况
double sum=0.0;
int i=0;
scanf("%d%d",&number,&mass_sum);
for(i=0;i<number;i++){
scanf("%d%d",&mass[i],&money[i]);
rate[i]=(double)money[i]/(double)mass[i];//坑点1:强制转换,否则无法AC
}
count=number;
while(mass_sum>0&&count>0){//坑点2:背包空间没用完,所以需要加count判断条件
max=findmax(rate,number);
if(mass_sum-mass[max]>=0){
mass_sum-=mass[max];
sum+=money[max];
}
else{
sum=sum+mass_sum*rate[max];
mass_sum=0;
break;
}
count--;
rate[max]=0.0;
}
printf("%.2lf",sum);
return 0;
}
int findmax(double* rate,int num){
int i=0,tag=0;
double max=0.0;
for(i=0;i<num;i++){
if((rate[i]-max)>=1e-6){
max=rate[i];
tag=i;
}
}
return tag;
}
坑点两个:
一个是强制转换的坑,可过数据为0个,第二个是背包空间没用完,可过80%的数据
//强制转换具体影响
#include <stdio.h>
int main()
{
int a=5;int b=2;
double c,d;
c=a/b;
d=(double)a/(double)b;
printf("%lf %lf",c,d);
return 0;
}
输出
2.000000 2.500000
P2240 【深基12.例1】部分背包问题的更多相关文章
- 洛谷P2240 【深基12.例1】部分背包问题(经典模板)
首先应该注意几个关键信息:装走尽多的金币.所有金币可以随意分割并且分割后金币的价值比不变; 我们可以抽象成一个买东西的场景,给你一定数目的钱,让你在这些钱内尽量在超市买更多的小零食,这就牵扯到了一个性 ...
- P4715 【深基16.例1】淘汰赛
P4715 [深基16.例1]淘汰赛 题目描述 有 2^n(n≤7) 个国家参加世界杯决赛圈且进入淘汰赛环节.我经知道各个国家的能力值,且都不相等.能力值高的国家和能力值低的国家踢比赛时高者获胜.1 ...
- 【vector+pair】洛谷 P4715 【深基16.例1】淘汰赛
题目:P4715 [深基16.例1]淘汰赛 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 这道题因为数据范围不大,所以做法可以非常简单,使用一个vector加上pair就可以了: ...
- 洛谷 P5706 【深基2.例8】再分肥宅水
题目连接: P5706 [深基2.例8]再分肥宅水 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 我提交的: 1 #include<iostream> 2 #inclu ...
- jzoj4916. 【GDOI2017模拟12.9】完全背包问题 (背包+最短路)
题面 题解 考场上蠢了--这么简单的东西都想不到-- 首先排序加去重. 先来考虑一下,形如 \[a_1x_1+a_2x_2+...a_nx_n=w,a_1<a_2<...<a_n,x ...
- P3613 【深基15.例2】寄包柜
传送门 题目大意 往一个\(a[i][j]\) 里边放东西,也可以取走东西,然后查询\(a[i][j]\)里边是什么东西. 思路: 显然我们可以暴力,但是你开不了那么大的数组. 翻了翻dalao们的题 ...
- P5727 【深基5.例3】冰雹猜想
链接:Miku -------------------- 欸,为什么我第一遍没过 -------------------- #include<iostream> using namespa ...
- 题解 P5718 【【深基4.例2】找最小值】
题目传送门 思路 介绍一种新方法--sort排序,它的格式是这样的sort(a+1,a+n+1,cmp);,我们只需要把a数组排好序,然后输出第\(1\)个元素即可. 定义a数组与变量\(n\)并输入 ...
- 题解 P5712 【【深基3.例4】Apples】
题目传送门 思路 仔细读题后,我们可以发现,输出可以分成\(2\)种情况,apple加s与apple不加s,所以我们可以使用if/else来实现. 接着,我们读入n. int n; cin>&g ...
随机推荐
- 推荐一款比迅雷下载速度快的mac下载器
Folx和迅雷是2款支持在Mac系统上进行文件资源下载的工具,两者都支持BT种子资源的下载和直链下载,但Folx还另外支持了下载计划的自定义和智能限速功能.本文主要是为了比较Folx和迅雷在下载同一资 ...
- Vegas教程:教你制作热门人物消失特效
在许多电影中,我们经常会看到一些人物逐渐消失的情景,这种情景一般都是通过后期技术处理的结果,现实生活中根本不可能出现,那么这种特效是如何制作处理的呢?下面小编就来教大家如何用Vegas Pro ...
- 系统兼容软件CrossOver和虚拟机软件,哪个好用?
想要在Mac上运行Windows软件的方法有很多种,比较常见的有安装双系统以及虚拟机.但是安装双系统会导致一个很大的问题,就是占用了过多的硬盘空间,这样一来会导致可使用的空间减少. 目前来说,大家都不 ...
- 早安打工人! 来把你的.NET程序模块化吧
嗨朋友们,大家好! 还记得我是谁吗? 对了! 我就是 .NET 打工人 玩双截棍的熊猫 今天呐,我特别要向 写框架 的朋友们,想要写框架 ** 的朋友们,已经有框架** 的朋友问声好! 为什么呢?因为 ...
- (原创)用.NET Core实现一个在线客服系统(上篇)
前言 没有视频的介绍显得尤为空白仓促.所以,如果你不赶时间,看看视频先 → → 戳我看视频 ← ← 在线演示访客端:http://role.fuyue.xyz/visitor/index客服端:ht ...
- C语言讲义——函数
为实现特定目的而编写的一段可被调用的代码 简单地讲:函数就是一组语句,取了个名字 别名:子例程(routine)/方法(Method,一般面向对象的语言使用这个叫法) 函数的组成部分 以主函数为例: ...
- Java基础教程——UDP编程
UDP:User Datagram Protocol,用户数据报协议 服务端: import java.net.*; import java.io.*; public class UdpServer ...
- OpenCV阈值处理函数threshold处理32位彩色图像的案例
☞ ░ 前往老猿Python博文目录 ░ 一.概述 openCV图像的阈值处理又称为二值化,之所以称为二值化,是它可以将一幅图转换为感兴趣的部分(前景)和不感兴趣的部分(背景).转换时,通常将某个值( ...
- 老猿学5G扫盲贴:与用户和终端相关的名词UE、SUPI、GPSI、PEI
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt+moviepy音视频剪辑实战 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 和4 ...
- 第15.37节 PyQt(Python+Qt)入门学习:containers容器类部件QMdiArea多文档界面部件详解及编程开发案例
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 一.引言 老猿在前期学习PyQt相关知识时,对每个组件的属性及方法都研 ...