陶陶摘苹果(升级版)P1478_巧妙模拟
如此水的题居然让我绞尽脑汁,我在想我是不是快退役了.
这道题我看见很多解法:贪心,背包,桶排乱七八糟一大堆.
题目
题目描述
又是一年秋季时,陶陶家的苹果树结了 n 个果子。陶陶又跑去摘苹果,这次他有一个 a 公分的椅子。当他手够不着时,他会站到椅子上再试试。
这次与 NOIp2005 普及组第一题不同的是:陶陶之前搬凳子,力气只剩下 s 了。当然,每次摘苹果时都要用一定的力气。陶陶想知道在 s<0 之前最多能摘到多少个苹果。
现在已知 nn 个苹果到达地上的高度 x[i],椅子的高度 a,陶陶手伸直的最大长度 b,陶陶所剩的力气 s,陶陶摘一个苹果需要的力气 y[i],求陶陶最多能摘到多少个苹果。
输入格式
第 1 行:两个数 苹果数 n,力气 s。
第 2 行:两个数 椅子的高度 a,陶陶手伸直的最大长度 b。
第 3 行~第 3+n-1 行:每行两个数 苹果高度 x[i],摘这个苹果需要的力气 y[i]
输出格式
只有一个整数,表示陶陶最多能摘到的苹果数。
虽然拿题目来凑篇幅是有一种很不道德的行为,但是我怕你没做过这题,所以...嘿嘿.
做法
既然他让我们求最多能拿多少个苹果,我们很容易想到背包.但是细细一想好像又不是,毕竟他的前辈可是一道大水题,那么既然他是由前一个题目叠加而作,那么我们把它分开求解即可.
我们可以将苹果分为两类,能拿的和不能拿的.
而不能拿的苹果又有两类,身高不够高而不能拿的和体力不够多而不能拿的.
那么我们在一开始读入的时候就将他们给去掉,可以节省很多大麻烦,我们并不用关心那些拿不了的.
而这样读入就有两种方式:
int p, m;
int x[6000], y[6000];
for(int i = 1; i <= n; i++)
{
读入p和m
if(条件符合)
x[++cnt1] = p, y[++cnt2] = m;//存入
}
第二种则是用while读入,
int h = a + b;
int t = n;
while(t != 0)
{
scanf("%d%d", &x[k], &y[k]);
t--;//读了一个减一个
if(x[k] > h || y[k] > s)//条件符合
x[k] = y[k] = 0;//清空
else
k++;//计数器加一位
}
本人使用第二种,更推荐第一种.
第二步,我们只需要贪心最小的y[i]就好了,毕竟耗费的体力越少摘得越多嘛~而且这是不必担心x与y的值会乱掉了,因为我们不需要再关心x了.
将y排序一边,体力值减掉,答案加起来.于是这道题就被我们使用巧妙的模拟解决掉了.
代码
#include <cstdio>
#include <algorithm>
using namespace std;
int n, s, a, b;
int k = 1;
int x[6000], y[6000];
int ans;
int main()
{
scanf("%d%d%d%d", &n, &s, &a, &b);
int h = a + b;
int t = n;
while(t != 0)
{
scanf("%d%d", &x[k], &y[k]);
t--;
if(x[k] > h || y[k] > s)
x[k] = y[k] = 0;
else
k++;
}
k--;
sort(y + 1, y + 1 + k);
for(int i = 1; i <= k; i++)
{
s -= y[i];
if(s >= 0)
ans++;
else
break;
}
printf("%d", ans);
}
陶陶摘苹果(升级版)P1478_巧妙模拟的更多相关文章
- 洛谷 P1478 陶陶摘苹果(升级版)
本萌新第一次发布题解,若有不严谨处请谅解. 我看了前面几位大佬的手笔,表示自己还是比较钟爱桶排序的.它非常简易直接,还省时间,尤其对于这类题目占用的的空间也很小. 我们看到题目下面的说明:xi< ...
- 洛谷——P1478 陶陶摘苹果(升级版)
题目描述 又是一年秋季时,陶陶家的苹果树结了n个果子.陶陶又跑去摘苹果,这次她有一个a公分的椅子.当他手够不着时,他会站到椅子上再试试. 这次与NOIp2005普及组第一题不同的是:陶陶之前搬凳子,力 ...
- 洛谷-陶陶摘苹果(升级版)-BOSS战-入门综合练习1
题目描述 Description 又是一年秋季时,陶陶家的苹果树结了n个果子.陶陶又跑去摘苹果,这次她有一个a公分的椅子.当他手够不着时,他会站到椅子上再试试. 这次与NOIp2005普及组第一题不同 ...
- 题解 P1478 【陶陶摘苹果(升级版)】
看着你们累死累活得快排.冒泡.结构体特殊冒泡.还有dp... 蒟蒻表示真的不用那么麻烦! 难度:新手村+1 压行情况:0 理解难度:0 首先我们来了解一下优先队列:(自己抄的自己...) 讲元素一个个 ...
- 洛谷 P1478 陶陶摘苹果(升级版)【贪心/结构体排序/可用01背包待补】
[链接]:https://www.luogu.org/problemnew/show/P1478 题目描述 又是一年秋季时,陶陶家的苹果树结了n个果子.陶陶又跑去摘苹果,这次她有一个a公分的椅子.当他 ...
- 常州模拟赛d4t2 陶陶摘苹果
题目描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出 n 个苹果.苹果成熟的时候,陶陶就会 跑去摘苹果. 陶陶的手不能弯 (他仅能把手伸直),当且仅当陶陶达到的高度与苹果的高度相等的时候,陶陶 ...
- P1478 陶陶摘苹果(升级版)
题目描述 又是一年秋季时,陶陶家的苹果树结了n个果子.陶陶又跑去摘苹果,这次她有一个a公分的椅子.当他手够不着时,他会站到椅子上再试试. 这次与NOIp2005普及组第一题不同的是:陶陶之前搬凳子,力 ...
- 洛谷P1478 陶陶摘苹果(升级版)
题目数据范围小,开两个数组手写冒泡应该也能过,不过和之前在牛客上的一题类似用结构体数组就好了,主要是注意用结构体数组的排序 题目 题目描述 又是一年秋季时,陶陶家的苹果树结了n个果子.陶陶又跑去摘苹果 ...
- 洛谷P1478 陶陶摘苹果(升级版)【水题】
又是一年秋季时,陶陶家的苹果树结了n个果子.陶陶又跑去摘苹果,这次她有一个a公分的椅子.当他手够不着时,他会站到椅子上再试试. 这次与NOIp2005普及组第一题不同的是:陶陶之前搬凳子,力气只剩下s ...
随机推荐
- 工具之grep
转自:http://www.cnblogs.com/dong008259/archive/2011/12/07/2279897.html grep (global search regular exp ...
- Centos 7 最小化部署zabbix
前言 文章内容是作者本人编写,之前一直放在word文档中,突然有闲情转移到博客上来了,欢迎后续观看者有问题找我探讨~~~ 废话不多说,先说下原理吧 概述 工作原理 通过c/s模式采集数据,基于b/s模 ...
- Shell之信号捕获
前言 当我们在运行某一段代码的时候,希望有类似事物一样的操作,要么成功,要么失败:一般的shell脚本都是自上而下,从左之后运行,碰到异常信号就会出错,从而终止脚本的运行,这个时候脚本可能运行到某一处 ...
- 表单提交,action 地址问题
jsp 页面如下: <%@ page contentType="text/html;charset=UTF-8" language="java" %> ...
- 为什么不在spring容器管理controller
Spring容器与SpringMVC容器 1.疑问:为什么不用spring去管理所有类? 我们配置springMVC 中,为什么controller不直接交给spring 管理而要spring MVC ...
- SystemVerilog搭建APB_I2C IP 层次化验证平台
一.前言 近期疫情严重,身为社畜的我只能在家中继续钻研技术了.之前写过一篇关于搭建FIFO验证平台的博文,利用SV的OOP特性对FIFO进行初步验证,但有很多不足之处,比如结构不够规范.验证组件类不独 ...
- Druid入门(1)—— 快速入门实时分析利器-Druid_0.17
一.安装准备 本次安装的版本是截止2020.1.30最新的版本0.17.0 软件要求 需要Java 8(8u92 +)以上的版本,否则会有问题 Linux,Mac OS X或其他类似Unix的操作系统 ...
- 面试官:"谈谈分库分表吧?"
转自:学习Java的小姐姐 www.cnblogs.com/chenchen0618/p/11624480.html 1.什么是分库分表 从字面上简单理解,就是将原本存储在一个库的数据分块存储在多个库 ...
- TLS使用指南(一):如何在Rancher 2.x中进行TLS termination?
引 言 这是一个系列文章,我们将在本系列中探索Rancher使用TLS证书的不同方式.TLS,安全传输层协议,是用于保护网络通信的加密协议.它是目前已经弃用的安全套接层(SSL)的继任者. 你可以从本 ...
- JAVA byte数组转化为16进制字符串输出
最简单的方法: 利用javax.xml.bind包下的DatatypeConverter printHexBinary public static java.lang.String printHexB ...