首页 > 其他分享 >【DP】超级丑数

【DP】超级丑数

时间:2024-05-08 19:56:59浏览次数:22  
标签:丑数 min pointers DP primes 超级 dp

题源

非常神奇的动态规划,不要一直尝试枚举所有的乘积,或者卡在primes数组中

定义数组 dp,其中 \(dp[i]\) 表示第 \(i\) 个超级丑数,第 \(n\) 个超级丑数即为 \(dp[n]\)。

由于最小的超级丑数是 1,因此 \(dp[1]=1\)。

如何得到其余的超级丑数呢?创建与数组 \(primes\) 相同长度的数组 \(pointers\),表示下一个超级丑数是当前指针指向的超级丑数乘以对应的质因数。初始时,数组 \(pointers\) 的元素值都是 \(1\)。

当 \(2≤i≤n\) 时,令 \(dp[i]=min⁡{dp[pointers[j]]×primes[j]\),然后对于每个 \(0≤j<m\),分别比较 \(dp[i]\) 和 \(dp[pointers[j]]×primes[j]\) 是否相等,如果相等则将 \(pointers[j]\) 加 \(1\)。

class Solution:
    def nthSuperUglyNumber(self, n: int, primes: List[int]) -> int:
        dp = [0] * (n + 1)
        m = len(primes)
        pointers = [0] * m
        nums = [1] * m

        for i in range(1, n + 1):
            min_num = min(nums)
            dp[i] = min_num
            for j in range(m):
                if nums[j] == min_num:
                    pointers[j] += 1
                    nums[j] = dp[pointers[j]] * primes[j]
        return dp[n]

标签:丑数,min,pointers,DP,primes,超级,dp
From: https://www.cnblogs.com/peterzh/p/18180745

相关文章

  • at_dp_j-ti-jie
    AT_dp_j思路期望dp。设$dp_{i,j,k,l}$表示当前有$0,1,2,3$个寿司的盘子数有$i,j,k,l$个时的期望次数。显然MLE。但可以发现$i+j+k+l=n$,所以可以去掉一维。设$dp_{i,j,k}$表示当前有$1,2,3$个寿司的盘子数有$i,j,k$个时的期望次数。首先有$dp_{0,0,0}=0$。......
  • RDP Wrapper Library v1.6.2 开源RDP 主机服务器
    RDPWrapperLibraryv1.6.2 主要特点:从Vista开始的任何Windows版本上的RDP主机服务器同时进行控制台和远程会话同时使用同一用户进行本地和远程登录(请参阅配置应用程序)最多 15个并发会话(实际限制取决于您的硬件和操作系统版本)控制台和RDP会话重影(在Windows......
  • 技术分享 | i.MX8M Mini适配MIPI转eDP芯片
    1.方案概述此方案使用HD-8MMN-CORE的核心板搭配TI公司的芯片SN65DSI86转换芯片实现。SN65DSI86作为一款MIPIDSI转eDP的芯片,支持双通道DSI输入,最大四通道显示输出,最大支持4K@60fps输出,WUXGA1080P。本方案中将采用单通道DSI输入,双通道DP输出到1080p的屏幕。HD8MMN-CORE系列工......
  • 概率与期望DP
    例题1:思路:代码:例题2:思路1:代码1:思路2(复杂度更低):代码2:例题3:思路:代码:例题4:思路:......
  • 线程池(ThreadPoolExecutor)
    线程池核心类ThreadPoolExecutor,通过池化思想来维护线程的创建与消费使用线程池的好处提高任务执行的响应速度,降低资源消耗。任务执行时,直接立即使用线程池提供的线程运行,避免了临时创建线程的CPU/内存开销,达到快速响应的效果。提高线程的可管理性。线程总数可预知,避免用......
  • 大模型高效微调详解-从Adpter、PrefixTuning到LoRA
    一、背景目前NLP主流范式是在大量通用数据上进行预训练语言模型训练,然后再针对特定下游任务进行微调,达到领域适应(迁移学习)的目的。指令微调是预训练语言模型微调的主流范式其目的是尽量让下游任务的形式尽量接近预训练任务,从而减少下游任务和预训练任务之间的Gap,实现预训练......
  • 基于Luckfox Pico的opencv使用UDP协议与ubuntu传输摄像头数据-小白进阶
    使用UDP传输opencv的mat数据并显示本教程适用于进阶的小白尝试先说一下背景吧,正在工作的我,突然间看到淘宝上有个很漂亮的价格还不错的linux小板子,遂买下。没错,工作太无聊以至于开始摸鱼学习~但奈何每天工作完回家就像躺着,所以板子到手都快半年了才开始研究实现了简陋的摄像头......
  • DP32RF002—低功耗SUB-1G收发一体SOC芯片
    DP32RF002是基于ARMCortex-M0+内核的超低功耗、高性能的、单片集成(G)FSK/OOK无线收发机的32位SoC芯片。工作于200~960MHz范围内,支持灵活可设的数据包格式,支持自动应答和自动重发功能,支持跳频操作,支持FEC功能,同时内部集成了完整的射频接收机、射频发射机、频率综合器、调制解调器......
  • 高一下三调|ssy的队列|hash dp|题解
    SSY的队列题目链接解析:考场上看到这个题第一眼是绝望的,毕竟数论咱是一窍不通.但是往下细看了看这个数据范围,N是很小的,就想了想模拟.然而只骗到10分.这个题绩效较高的解法是状压dp,在N<15的范围之内均可薄纱(ppllxx_9G也是成功拿到这70rank1了orz),可得70,但是一到后......
  • 【DP】【分治】最大子数组和
    题源不要太激动,过拟合,一上来就开dp,这道题只用一个变量就可以记录前缀和了【转载】我觉得这道题目的思想是:走完这一生如果我和你在一起会变得更好,那我们就在一起,否则我就丢下你。我回顾我最光辉的时刻就是和不同人在一起,变得更好的最长连续时刻classSolution:defmaxSu......