[NOIP] 2018 普及组题解

本文提供了2018年NOIP普及组比赛的四道题(T1-T4)的详细解题思路,包括线性遍历、模拟动态规划和深度优先搜索等算法。在总结部分,作者反思了比赛表现,表示将努力提升算法水平以迎接未来的挑战。
摘要由CSDN通过智能技术生成

目录

一、题解

1、T1(title)

2、T2(fight)

3、T3(bus)

4、T4(tree)

二、总结

三、代码

1、T1(title)

2、T2(fight) 

3、T3(bus) 

4、T4(tree)



一、题解


1、T1(title)

这道题就是一道送分题,可以直接用选择结构求解,但如果不想打太多代码,还是用循环结构看起来比较舒服

2、T2(fight)

这个题我们观察题目,首先可以拿到龙虎两方的初始势力,然后再来找应该在什么地方“天降神兵”

一个线性遍历,逐个枚举每一个兵营,再判断如果在此兵营“天降神兵”,我们已有的最小差值会不会比“天降神兵”后的最小差值大,再对其进行更新

但这道题不能就此了事,因为不知道是哪位出题人,再题目中写下了这样一句话:“第 m号兵营中的工兵很纠结,他们不属于任何一方。”

所以如果我们在任何一个兵营“天降神兵”,都不能使初始最小值更新,那么我们就应该在第m号兵营“天降神兵”,也就是直接输出m,至于为什么不能输出0,无可奉告

3、T3(bus)

这个题也不知道各位看出来是DP没有,这个题搞得我很开心鬼火冒,刚刚开始还以为是暴(mǒ)力(nǐ)

所以我就来讲讲这个题该如何模拟DP

首先是状态的定义,我们用一个三维数组来DP: 

我们用逆推的思想,dp[i][j][k]表示到第i个人时车还有j分钟到且现在有k个人在等车

我们现在来讲讲状态转移方程,因为我们输入后肯定要排序,此时就不妨将两个人之间等车的时间差拿到用wait数组保存

wait[i]表示第i个人到第i+1个人之见的时间差

(1) j > wait[i] (如图)

         

因为上一个状态中,也就是第i+1个人的状态中,车离第i+1个人的距离为j-wait[i],而等车的人数比现在第i个人的状态多一个,因为有k个人在等这班车,所以时间还要加上一个k*wait[i],此时:

dp[i][j][k] = dp[i + 1][j - wait[i]][k + 1] + k * wait[i]

(2) j <= wait[i]

第一种情况,第i+1个人也要坐这一班车(如图)

因为此时第i+1个人到了之后是不需要等车的,所以他刚刚到就可以坐上车,所以第i+1个人的状态中,车已经在等他了,所以j就为0,等车人数当然也要多一个,和上一种情况一样,也有k个人在等车,时间也要加上一个k*wait[i],此时:

dp[i][j][k] = dp[i + 1][0][k + 1] + k * wait[i]

 

第二种情况,第i+1个人不坐这班车(如图)

 

<

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值