您的位置:首页 > 其它

BZOJ1978: [BeiJing2010]取数游戏 game

2015-12-20 15:25 393 查看
反正就是DP

然后用因子更新减少复杂度

#include<cstdio>
#include<cmath>
using namespace std;
inline int max(int a,int b){return a>b?a:b;}
int pre[10000005],f[50005],n,l;
char c;
inline void read(int &a)
{
a=0;do c=getchar();while(c<'0'||c>'9');
while(c<='9'&&c>='0')a=(a<<3)+(a<<1)+c-'0',c=getchar();
}
int main()
{
int n,l;
read(n),read(l);
int ans=0;
for(int i=1;i<=n;i++)
{
int x;
read(x);
for(int j=1;j<=sqrt(x);j++)
if(x%j==0)
{
if(j>=l)
f[i]=max(f[i],f[pre[j]]+1),pre[j]=i;
int k=x/j;
if(k>=l&&k!=j)
f[i]=max(f[i],f[pre[k]]+1),pre[k]=i;
}
ans=max(ans,f[i]);
}
printf ("%d\n",ans);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: