2017.08.15【NOIP提高组】模拟赛B组

T1:这题暴力枚举,找一个最近的点就好了。


T2:设f[i][j]表示到第i个点上一次跳的距离为j,那么:

f[i][j]=min(f[i+j][j],f[i-j][j-1])+a[i],观察转移方程,我们可以得到循环顺序因为先顺着枚举j,然后到着枚举i,最终的答案就是min(f[n][j])。


总结:有时候dp时我们不知道应怎样确定循环顺序,这时我们可以通过观察状态转移方程来解决。


T3:二分答案,在判断答案是否合法时暴力枚举大包装选的数量,然后计算出小包装选的数量,最后统计答案。


T4:数位dp。

设f[i][j]表示前i个数和为j的最小加号,那么我们枚举一个k,表示从i+1~k这一段合为一个数,设这个数的值为w,那么f[k][j+w]=min(f[k][j+w],f[i][j]+1)。答案为f[n][s]。

但这样会超时,所以我比赛时加了两个优化:

1、当f[i][j]为maxlongint时,直接跳过

2、当w>s时,结束枚举k

但是数据太变态了,专门出一大堆前导0,所以我们要预处理出一个next[]数组,next[i]表示第i个位置往后最近的一个不为0的位置,注意next[n]=n,那么我们的只需从next[i]往后枚举即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值