SSL P2463 2015年普级组模拟试题 序列

SSL P2463 2015年普级组模拟试题 序列_第1张图片

题解:
DP:
F[i,j]表示序列长度为i且序列最后一个数是j的“好序列”的个数。
1.先预处理出1~n每个数的约数。
2.直接做DP,F[i,j]=∑F[i-1,x],其中x为j的约数。

时间复杂度:O(n*k*log n)
空间复杂度:O(n*k)

var
     f,a:array [0..2001,0..2001] of longint;
     b:array [0..2001] of longint;
     n,m,i,j,k,ans:longint;
begin
     readln(n,m);
     for i:=1 to n do
         begin
            f[0,i]:=1;
            for j:=1 to i do
                if i mod j=0
                   then begin
                              inc(b[i]);
                              a[i,b[i]]:=j;
                        end;
         end;
     for i:=1 to m-1 do
         for j:=1 to n do
             for k:=1 to b[j] do
                 f[i,j]:=(f[i,j]+f[i-1,a[j,k]]) mod 1000000007;
     for i:=1 to n do
         ans:=(ans+f[m-1,i]) mod 1000000007;
     writeln(ans);
end.

你可能感兴趣的:(pascal,动态规划)