1 条题解
-
0
我们定义 为长度为 且以 结尾的好序列的数量。
设 的因子为 。那么有:
$$\text{dp}[i][j] = \sum_{t=1}^{l} \text{dp}[i-1][x_t] $$这种方法的时间复杂度为 ,不够快。但可以利用以下事实:下面的循环可以在 时间内运行,从而得到一个 的解法,足够通过所有测试。
for (int i = 1; i <= n; i++) // 从 1 到 n 循环 for (int j = i; j <= n; j += i) // 遍历所有 i 的倍数,且不超过 n#include<iostream> int t,n,ans,dp[2016][2016],M=1e9+7,i,j,k; int main(){ std::cin>>n>>t;dp[0][1]=1; for(i=1;i<=t;i++)for(j=1;j<=n;j++)for(k=j;k<=n;k+=j)(dp[i][k]+=dp[i-1][j])%=M; for(i=1;i<=n;i++)(ans+=dp[t][i])%=M;std::cout<<ans; }
- 1
信息
- ID
- 6806
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者