码迷,mamicode.com
首页 > 其他好文 > 详细

【SCOI2009】游戏

时间:2019-08-09 21:20:27      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:org   string   lse   cstring   ++   scoi2009   targe   mes   size   

题目

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】游戏

标签:org   string   lse   cstring   ++   scoi2009   targe   mes   size   

原文地址:https://www.cnblogs.com/nibabadeboke/p/11329457.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!