
f[i,j*k]:=f[i,j*k]+f[i-1,j];
设f[i,j]表示前i个,当那一位数字为j*k的时候的最大好序列个数
代码如下:
const
maxn=2000;
p=1000000007;
var
f:array [1..maxn,1..maxn] of longint;
i,j,k,n,m:longint;
ans:int64;
begin
readln(n,m);
for i:=1 to n do
f[1,i]:=1;
for i:=2 to m do
for j:=1 to n do
for k:=1 to n div j do
f[i,j*k]:=(f[i,j*k]+f[i-1,j]) mod p;
for i:=1 to n do ans:=(ans+f[m,i]) mod p;
writeln(ans);
end.

本文介绍了一种通过动态规划算法来计算特定条件下最大好序列个数的方法。使用了一个二维数组f[i,j]来记录状态,其中i表示考虑的元素数量,j表示当前位上的数字。通过迭代更新f[i,j*k]的状态来实现计数。

被折叠的 条评论
为什么被折叠?



