博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Luogu P4161 [SCOI2009]游戏 数论+DP
阅读量:4519 次
发布时间:2019-06-08

本文共 927 字,大约阅读时间需要 3 分钟。

ywy神犇太巨辣!!一下就明白了!!


题意:求$lcm(a_1,a_2,...,a_k)$的种类,其中$\Sigma\space a_i <=n$,$a_i$相当于环长

此处的$DP$,相当于是在求$lcm(a_1,a_2,...,a_k)$按算术基本定理分解的式子的种类。

感性理解一下,一堆>=2的数,加起来一定比乘起来小,但是我们又要保证他们互质(否则就亏了,不如同时去掉gcd),所以就每个数就是一个质数的幂。

所以这一堆数大致就是形如$p_i^{k_i}$这种样子的

所以可以背包转移:把每个质数当做物品,注意转移时的顺序,用质数$p$转移时不能访问已经经过$p$转移过的(类似01背包的倒序循环),否则不满足互质;

#include
#include
#define R register intconst int N=1010;using namespace std;int n,cnt,pri[N];bool v[N];long long f[N],ans;inline void PRI() {   for(R i=2;i<=n;++i) { if(!v[i]) pri[++cnt]=i; for(R j=1;j<=cnt&&i*pri[j]<=n;++j) { v[i*pri[j]]=true; if(i%pri[j]==0) break; } }}signed main() { scanf("%d",&n); f[0]=1; PRI(); for(R i=1;i<=cnt;++i) for(R j=n;j>=0;--j) for(R k=pri[i];k<=j;k*=pri[i]) f[j]+=f[j-k]; for(R i=0;i<=n;++i) ans+=f[i]; printf("%lld\n",ans);}

2019.05.25

转载于:https://www.cnblogs.com/Jackpei/p/10923147.html

你可能感兴趣的文章
jquery与checkbox的checked属性的问题
查看>>
HDU5092——Seam Carving(动态规划+回溯)(2014上海邀请赛重现)
查看>>
java 格式化字符串
查看>>
[.Net]轻量ORM——Dapper
查看>>
语言基础
查看>>
C# : 操作Word文件的API - (将C# source中的xml注释转换成word文档)
查看>>
C#中字符串转换成枚举类型的方法
查看>>
psplash
查看>>
git的安装和简单使用
查看>>
20151024-1025-威海-第5届全国高校软件工程专业教育年会参会总结
查看>>
Airplace平台
查看>>
TinyOS实例介绍
查看>>
15个nosql数据库
查看>>
css hack 尽我所见
查看>>
[转]ORACLE联机日志文件无故全部消失
查看>>
Javascript基础学习12问(四)
查看>>
[原]VS2012入门图文教程——第一个程序Hello World
查看>>
#pragma once 与 #ifndef 解析(转载)
查看>>
swift 数据存储
查看>>
Objective-C内存管理教程和原理剖析(三)
查看>>