萌新求助

P2516 [HAOI2010] 最长公共子序列

~~数组名是TLE当然会TLE~~
by MC方块人 @ 2019-12-29 11:53:38


吸一下氧
by MC方块人 @ 2019-12-29 11:54:02


@[MC方块人](/user/199330) ~~难道我改成`WA`就会`WA`?~~
by Ryo_Yamada @ 2019-12-29 11:54:36


@[MC方块人](/user/199330) 吸过了,没用
by Ryo_Yamada @ 2019-12-29 11:54:51


@[breeze末影](/user/242543) 取模优化? register? 刚交的不开O2不到1sAC ```cpp #include<cstdio> #include<cstring> const int P=100000000,N=5009; char a[N],b[N]; int F[N],G[N],U[N],V[N]; int main(){ register int n,m,i,j,*f=F,*g=G,*u=U,*v=V,*w; scanf("%s%s",a+1,b+1),n=strlen(a+1)-1,m=strlen(b+1)-1; for(j=0;j<=m;++j)u[j]=1; v[0]=1; for(i=1;i<=n;++i){ w=u,u=v,v=w,w=f,f=g,g=w; for(j=1;j<=m;++j){ f[j]=g[j]>f[j-1]?g[j]:f[j-1],u[j]=0; if(a[i]==b[j]&&f[j]<=g[j-1]+1)f[j]=g[j-1]+1,u[j]+=v[j-1]; if(f[j]==g[j])u[j]+=v[j]; if(f[j]==f[j-1])u[j]+=u[j-1]; if(a[i]!=b[j]&&f[j]==g[j-1])u[j]+=P-v[j-1]; while(u[j]>=P)u[j]-=P; } } printf("%d\n%d",f[m],u[m]); return 0; } ```
by panyf @ 2019-12-29 12:06:37


@[breeze末影](/user/242543) 滚动数组重载[]将i%2改成i&1,或者像我一样用指针交换滚动数组
by panyf @ 2019-12-29 12:07:40


@[AK新手村](/user/221955) 好的,我试试
by Ryo_Yamada @ 2019-12-29 14:16:19


|