问题标题: 酷町堂:1801 换小额钞票

0
0

1
已采纳
陆姗姗
陆姗姗
资深守护
资深守护

这一题因为n的数据范围很大,1<=n<=10000,使用三重for循环来穷举的话会超时,需要转化另一个思路

 

因为100的倍数一定是50的倍数,我们可以从一共有多少个50元来考虑,最小的情况可能是有0个50元,最多的情况可能是有n*100/50个50元

而每个50元可以拆成①10+10+10+10+10,②20+20+10,③ 20+10+10+10三种情况,100元的话可以拆成100/20+1共六种情况,150元的话可以拆成150/20+1共8中情况,以此类推。。。

 

所以最外层循环是50元的个数,从0到n*100/50,循环内,我们计算不是50元的那部分钱可以拆成多少种情况,然后累加起来得到最终结果

1
陆麟瑞
陆麟瑞
资深天翼
资深天翼

这道题可以用一个很巧妙的方法计算。、

n*=100;
    for(int i=0; i<=n/50; i++)
    {
            ans+=(n-i*50)/20+1;
    }

最后输出ans即可。

0
我要回答