SCOI2009游戏
Posted nibabadeboke
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SCOI2009游戏相关的知识,希望对你有一定的参考价值。
DP
根据题意,可以发现N个数可以组成若干个环
设组成了K个环,每个环的长度为 L[ i ],设lcm(l[1],l[2]·····,l[k])为A,对A分解质因数,
现在我们可以得到一个结论:
如果 那么就不合法
推到现在,我们就能得出一个DP
设为枚举到第 i 个质数,和为 j 的方案数
那我们就可以得出方程转移式
可以把二维滚成一维
上代码
#include<cstdio> #include<cstring> using namespace std; bool vis[2000]; long long tot,n,f[1500],b[1500]; void init()//筛N以内的素数 memset(vis,true,sizeof(vis)); tot=0; for (int i=2;i<=n;i++) if (vis[i]==true) b[++tot]=i; for (int j=i+i;j<=n;j+=i) vis[j]=false; int main() scanf("%lld",&n); init(); f[0]=1; for (int i=1;i<=tot;i++) for (int j=n;j>=1;j--) int k=1; while (k*b[i]<=j) f[j]+=f[j-b[i]*k],k*=b[i]; long long ans=0; for (int i=1;i<=n;i++) ans+=f[i]; printf("%lld\n",ans+1);
以上是关于SCOI2009游戏的主要内容,如果未能解决你的问题,请参考以下文章