Noip2017提高组Day1

不知不觉自己退役两年了呢。。

小凯的疑惑

[Problem]

小凯手中有两种面值的金币,两种面值均为正整数且彼此互素。 每种金币小凯都有
无数个。 在不找零的情况下, 仅凭这两种金币,有些物品他是无法准确支付的。 现在小
凯想知道在无法准确支付的物品中,最贵的价值是多少金币? 注意:输入数据保证存在
小凯无法准确支付的商品。

[Solution]
假设面值分别为a, b
Ans = a*b - (a + b)
证明:
我们假设a < b, 又Gcd(a,b) = 1;
那么a % b, 2 * a % b, 3 * a % b ……(b-1) * a % b 均不相同
即ak % b 均不相同,其中1<= k < b
这个结论不知道可以看一下hdu5514这道题目
我们把整个数集按照模b结果分为b类
对于任意整数x
若x%b=0,显然可以凑出
若x%b=1,满足条件的最小x为k*a,其中k * a % b = 1,而对于k *a + b、k *a+2 *b…..都可以通过减去若干b,最终成为ka来凑出,那么此类数最大凑不出的是什么呢? k *a -b,其中ka%b=1
若x%b = 2,同理最大凑不出的数为ka-b,其中ka %b = 2
….
以此类推
若x%b=t, 最大凑不出的数为ka-b,其中ka%b=t
因此ans=max(ka-b) = a(b-1)-b = a*b - (a + b)

逛公园

[Solution]
我们可以观察到k很小,假设从第一个点到第i个点的最短距离为t,那么我们只需要保留到第i个点距离为t~t+k的方案即可,因此我们用f[i][j]表示从第一个点到第i个点距离为t+j的方案数
我们首先tarjan缩点,然后形成DAG图,最后跑一边dp即可
对于每一个f[i],加入i与x有连边,那么拿f[i]的最优解去更新f[x],如果i这个点是个环,一圈的权值为t,那么把每个f[i][j]累加到f[i][j + t]中即可
复杂度O(nk+mK^2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值