CSP模拟测试3

最简交易
这个题的数据范围是\(n\leq60,x\leq 10^{18}\),如果这个题求的是最小支付张数,其实这个是最简单的,直接贪心就行,直接使用当前最大的币值支付就可以了。现在的问题是他可以找回,找回的钱的张数可能更小,举个例子
3 87
1 10 100
直接支付87的话,是15张
如果找回的话,用100元,找回13元,100是一张,13是4张,共有5张
所以找回的更少
这个问题,我思考卡住的地方在于:
1、60的数据,我能用什么样的时间复杂度?dp吗?dp里面肯定有一个维度是钱数,可是钱数的数据范围太大了,dp不可以
2、\(x\in[ a[p], a[p+1]]\),a[p+1]是a[p]的倍数,也就是说,里面的每一个都可以是\(y\),直接枚举,肯定会超时,刚开始我以为,如果不能直接支付的话,使用a[p+1]支付就可以了,但是后来发现这个贪心不对,举个例子:
3 40
1 7 49
直接支付的话是,35+5,是10张
支付49的话是,1+1+2,是4张
支付6*7,减去2两元,是8张

posted @ 2024-12-18 10:36  xinyimama  阅读(3)  评论(0编辑  收藏  举报