2020 ICPC(威海) —L. Clock Master(质数+分组背包)

ICPC威海竞赛中的L. Clock Master问题,要求将数字n拆分为质数幂次之和,以最大化LCM。通过确保各数互素,采用分组背包策略,每个质数的不同幂次为一组。由于直接计算lcm会溢出,因此计算log(lcm),预先处理log值,用加法替代乘法以避免溢出。
摘要由CSDN通过智能技术生成

L. Clock Master

题目大意:

将题目转化一下就是把n拆分为若干个数的和,使得这些数的lcm最大,输出log(lcm)。

思路:

如果分解出的数中两个数成倍数的关系的话,那么其中小的那个数就是没有任何意义的(你细品)。使lcm最大也就是任意两个数之间尽量互素。考虑分组背包,一个素数的不同幂次为一组中的不同物品,问题即转化为了在每组只能选取一个数,求乘积的最大值(不同组中的数是不同素数的幂次,一定互素)
但是如果你直接相乘求lcm的话会爆long long ,那么题目里面要我们求的是log(lcm)。那么我们高中的时候就学过log(a*b) =log a + log b。所以我们先预处理出前3e4的log值,然后把乘法直接转化为加法即可。

AC Code

#include<bits/stdc++.h>
using namespace std;
const int N=3e4+10;
double LOG[N],dp[N];
int primes[N],ans[N];
int cnt=
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值