洛谷 P1478 陶陶摘苹果(升级版)c++题解

一、题目回顾

题目描述

又是一年秋季时,陶陶家的苹果树结了 n 个果子。陶陶又跑去摘苹果,这次他有一个 a 公分的椅子。当他手够不着时,他会站到椅子上再试试。

这次与 NOIp2005 普及组第一题不同的是:陶陶之前搬凳子,力气只剩下 s了。当然,每次摘苹果时都要用一定的力气。陶陶想知道在 s<0 之前最多能摘到多少个苹果。

现在已知 n 个苹果到达地上的高度 x_{i}​,椅子的高度 a,陶陶手伸直的最大长度 b,陶陶所剩的力气 s,陶陶摘一个苹果需要的力气 ​y_{i},求陶陶最多能摘到多少个苹果。

输入格式

第 11 行:两个数 苹果数 n,力气 s。

第 22 行:两个数 椅子的高度 a,陶陶手伸直的最大长度 b。

第 33 行~第 3+n-13+n−1 行:每行两个数 苹果高度 x_{i},摘这个苹果需要的力气 y_{i}​。

输出格式

只有一个整数,表示陶陶最多能摘到的苹果数。

二、代码与思路

#include<bits/stdc++.h>//万能头文件
using namespace std;
struct cat
{
	int a;//高度
	int s;//消耗的体力
};//创建结构体cat
bool cmp(cat f1,cat f2)
{
	return f1.s<f2.s;
}//sort从小到大排序函数
int main()
{
	ios::sync_with_stdio(false);//cin、cout输入输出加速
	cin.tie(NULL), cout.tie(NULL);//cin、cout输入输出加速
	int n,a,s,b,ans;//定义
	cin>>n>>s>>a>>b;//输入苹果数、力气、椅子的高度、陶陶手伸直的最大长度
	cat arr[n];//定义结构体数组
	a=a+b;//算出陶陶和椅子的高度
	for(int i=0;i<n;i++)
	{
		cin>>arr[i].a>>arr[i].s;
	}//输入每个苹果消耗的体力和高度
	sort(arr,arr+n,cmp);//排序
	for(int i=0;i<n;i++)
	{
		if(arr[i].s<=s&&arr[i].a<=a)//判断是否有足够的体力去摘苹果,是否够得到(一定要是<=)
		{
				s=s-arr[i].s;//减去摘苹果消耗的体力
				ans++;//能摘得苹果数量加一
		}
	}
	cout<<ans;//输出能摘得苹果数量
	return 0;//完美结束
}

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值