秋招模拟赛第39场|2023.09.02-淘天-研发
- Status
- Done
- Rule
- IOI
- Problem
- 3
- Start at
- 2023-9-6 19:00
- End at
- 2023-9-6 20:12
- Duration
- 1.2 hour(s)
- Host
- Partic.
- 25
You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.
小红最近一直在学习数组,突然有了一个想法,他定义了一个“特别数组”,当且仅当满足以下三个条件:
现在给出n和m的值,请你求出满足条件的“特别数组”数量。由于答案可能过大,请对109+7取模。
两个正整数n和m,用空格隔开。
1≤n,m≤1000
特别数组的数量,答案对109+7取模。
输入输出示例仅供调试,后台判题数据一般不包含示例
输入
3 5
输出
4
说明
[1,2,3],[4,2,3],[2,4,3],[5,4,3]共有以上四个好数组
给出n和m的值,要求求出一个"特别数组"的数量,并对1e9+7取模
其实并没有什么其他好计算的办法,那么就想到动态规划能否解决问题,首先n和m的范围都在1000以内,那么代表支持O(n2logn)的时间复杂度,那么dp的第一维肯定是我们有多少个数,另外"特别数组"是所有数加起来是n的倍数,也就是说模n为0,那么第二维就可以设置成当前所有数加起来模n为多少
所以我们设dp[i][j],表示当前一共有i个数并且所有数加起来模n为j的数组的数量,那么在转移的时候可以枚举i与j和当前最后一个数是多少,最后一位数一定是i的倍数,所以我们可以用一个调和级数的时间复杂度去枚举它,最后答案即为dp[n][0]
转移方程为