CF414B

这道题dp状态表示需要一点思维,而且会卡到时间复杂度
之前题主用的是试除法,时间复杂度为n^2.5,然后被卡了,但是换一种写法就是对的

#include <iostream>
#include <utility>
using namespace std;
typedef long long ll;
#define fi(i, a, b) for (int i = a; i <= b; ++i)
#define fr(i, a, b) for (int i = a; i >= b; --i)
#define x first
#define y second
#define sz(x) ((int)(x).size())
#define pb push_back
using pii = pair<int, int>;
#define int long long
//#define DEBUG
int dp[2005][2005];
const int N = 1e9 + 7;
signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n, m;
    cin >> n >> m;
    fi(i, 1, n) dp[1][i] = 1;
    fi(i, 2, m)
    {
        fi(j, 1, n)
        {
            for (int k = 1; k * j <= n; k++)
            {
                dp[i][j] += dp[i - 1][k * j];
                dp[i][j] %= N;
            }
        }
    }
    int ans = 0;
    fi(i, 1, n)
    {
        ans += dp[m][i];
        ans %= N;
    }
    cout << ans << endl;
#ifdef DEBUG
//freopen(D:\in.txt,r,stdin);
#endif
    return 0;
}
posted @ 2022-02-24 12:03  Sun-Wind  阅读(22)  评论(0编辑  收藏  举报