第十届蓝桥杯大赛青少年创意编程C++组省赛之小猫吃鱼

本文介绍了一个关于小猫在多个站点吃鱼的问题,每个站点的鱼价格不同且有保存费用。解题关键是对比当前站点鱼的价格与前一站购买鱼的总成本,选择最低费用方案。通过示例输入和输出解析了问题,并提供了C++代码实现。强调多做题和深入理解解题方法的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、题目描述:小猫吃鱼问题

样例输入:

5

6 3

7 1

3 2

8 3

9 5

样例输出:

29

二、解题思路:

当up主第一眼看到题目描述的时候,完全不知所云 ,后面结合样例慢慢就能理解题目,读完题目之后,我们需要明确题目的几个要点:

  • 有n个站点,每一个站点猫都需要吃一条鱼
  • 第一个站点猫要吃的鱼只能在第一个站点买,其它站点猫要吃的鱼既可以在本站点买,也可以是前面几站买来的
  • 如果本站的鱼是前面的站点买来的,那么本站鱼的总费用就是前面某个站点买鱼的价格,加上鱼运到当前这个站点所需要的保存鱼的总费用
  • 什么情况下需要买前面站点的鱼呢?,比如有两个站点分别是a:6   1(6代表鱼的价格,1代表保存鱼到下一站需要的价格)和b:9   3,那咱们怎么选择呢?,第一站吃的鱼只能在第一站买,因此首先花6块钱买第一个站点的鱼,到了第二个站点之后发现鱼的价格是9元,再想一想如果我在上一个站点买鱼到这个站点来吃,那么鱼+运费的价格也才7元,小于9元,因此第二站的鱼应该在第一个站点买,因此总共的最小费用是:6+7=13元。

思路:

将当前站点的鱼的价格与(上一个站点需要的费用+上一个站点保存鱼的价格)进行比较,如果前者较小,那么在当前站点买鱼,如果后者较小,那么买前面站点的鱼


样例分析:

三、代码实现: 

#include<bits/stdc++.h>
using namespace std;

int main()
{
	int fish_price[105];  //用来存储每一站鱼的价格 
	int fish_save[105];   //用来存储每一站鱼保存到下一站的费用 
	int n;                //n个站点
	int min_sum=0;        //用来存储一路花费的最少费用 
	int min=INT_MAX;      
	cin>>n;
	for(int i=0;i<n;i++)
		cin>>fish_price[i]>>fish_save[i];
	//核心逻辑代码 
	for(int i=0;i<n;i++)  
	{
		if(fish_price[i]<min)
			min=fish_price[i];     //此时的min代表本站的最小花费 
		min_sum+=min;
		min=min+fish_save[i];      //此时的min代表本站的最小费用+本站的保存费用 
	} 
	cout<<min_sum; 
	return 0;
}

四、总结: 

还是要多做题,当学习完一个解题方法之后,一定要去找同类型的题目去做,不断去刷题,这样才能把这个方法真正掌握好,而不是学习完方法就做一题就完了,这样还是不能够完全掌握这种方法(ps:如果你天赋异禀当然除外啦!😊)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值