CodeForces 1373 - E. Sum of Digits - 贪心 + 构造

题目要求找到最小的整数x,使得数码和序列f[x]到f[x+k]的和等于n。通过贪心策略,尽可能在个位产生进位,优先考虑99...98形式的数字,以减少位数并保持x最小。由于数据规模较小,可以通过构造方法和贪心相结合来寻找解决方案。虽然未能证明贪心的正确性,但根据数据范围,贪心策略应该有效。
摘要由CSDN通过智能技术生成

题目传送门:E. Sum of Digits

题目大意

f[x] 为x十进制表示的数码和,给定n, k找到最小的x使得f[x] + f[x + 1] + ... + f[x + k] = n (1 \leqslant n \leqslant 150, 0 \leqslant k \leqslant 9)

思路

本题做法有很多,比如本题n和k都很小,我们可以打表

这里我讲我过的方法(后面可能会补上一些其他方法),贪心 + 构造

贪心的要点在于:进位只需进到十位,如果有更高位的进位,如9999 -> 10000,数码和为37,那么一定存在更优的x比9999小,比如198 -> 199

构造的要点在于:对于某个个位,如果需要进位,就构造成x9...98y的形式,如果不用进位就构造成x9...9y的形式,当然中间的9和8可以省略的,比如n比较小,答案可能就是xy的形式(x可以为0)

因为我们希望找到最小的x,所以尽可能多的使用9使得位数尽可能少,并且使最高位尽可能小(这是显然的)

用上述方法,我们只要对于x的每个个位构造一个答案,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值