1 条题解

  • 0
    @ 2018-11-17 01:34:35

    题目简述:有个货币系统A(n,a),要寻找一个等价的可替代A的简化版的货币系统B(m,b),求最小m。
    根据题意,不难得到的思路是货币系统B是A的瘦身版。若将A中可被重复表示的货币完全删掉即可,若删不掉,则说明货币系统A已经是最简货币系统了,B=A。
    思路:由于每一种面值的货币数量不限,而多张小面值货币是可以等价于单张大面值货币的。故:
    1、先对货币系统A中的货币进行升序,
    2、对货币系统A中的货币进行完全背包枚举货币系统B中的面值和数量m。
    变量设置: a[i]表示货币系统A中面值第i小的货币;1<i<=n;
    b[j]表示货币系统B中面值为j的货币是否需要,b[j=1表示需要,b[j]=0表示不需要。
    当b系统中每增加1种新面值时,m+1。 根据数据规模 j<=25000,循环跑得下来。

    核心代码: sort(a+1,a+1+n);
    b[0]=1,m=0; //初始化
    for(int i=1;i<=n;++i)
    {
    if(b[a[i]]) continue; ++m;
    for(int j=a[i];j<S;++j) b[j]|=b[j-a[i]]; //#define S 25005
    }
    printf("%d\n",m);

  • 1

2# 货币系统(长郡数据)

信息

难度
7
分类
(无)
标签
递交数
24
已通过
8
通过率
33%
上传者