AC日记——[SCOI2009]游戏 bzoj 1025

2023-02-24,,

[SCOI2009]游戏

思路:

  和为n的几个数最小公倍数有多少种。

  dp即可;

代码:

#include <bits/stdc++.h>
using namespace std;
#define maxn 1005
#define ll long long
int n,num;
ll dp[maxn][maxn],pi[maxn];
bool if_p[maxn];
void euler(int limit)
{
for(int i=;i<=limit;i++)
{
if(!if_p[i]) pi[++num]=i;
for(int j=;pi[j]*i<=limit&&j<=num;j++)
{
if_p[i*pi[j]]=true;
if(i%pi[j]==) break;
}
}
}
int main()
{
scanf("%d",&n),euler(n);
dp[][]=;
for(int i=;i<=num;i++)
{
for(int v=;v<=n;v++)
{
dp[i][v]=dp[i-][v];
for(ll pos=pi[i];pos<=v;pos*=pi[i])
{
dp[i][v]+=dp[i-][v-pos];
}
}
}
ll ans=;
for(int i=;i<=n;i++) ans+=dp[num][i];
cout<<ans+;
return ;
}

AC日记——[SCOI2009]游戏 bzoj 1025的相关教程结束。

《AC日记——[SCOI2009]游戏 bzoj 1025.doc》

下载本文的Word格式文档,以方便收藏与打印。