1 条题解
-
0Guest LV 0
-
0
题目简述:有个货币系统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
信息
- 难度
- 7
- 分类
- (无)
- 标签
- 递交数
- 24
- 已通过
- 8
- 通过率
- 33%
- 上传者