zoukankan      html  css  js  c++  java
  • Codeforces Round #240 (Div. 1)B---Mashmokh and ACM(水dp)

    Mashmokh’s boss, Bimokh, didn’t like Mashmokh. So he fired him. Mashmokh decided to go to university and participate in ACM instead of finding a new job. He wants to become a member of Bamokh’s team. In order to join he was given some programming tasks and one week to solve them. Mashmokh is not a very experienced programmer. Actually he is not a programmer at all. So he wasn’t able to solve them. That’s why he asked you to help him with these tasks. One of these tasks is the following.

    A sequence of l integers b1, b2, …, bl (1 ≤ b1 ≤ b2 ≤ … ≤ bl ≤ n) is called good if each number divides (without a remainder) by the next number in the sequence. More formally for all i (1 ≤ i ≤ l - 1).

    Given n and k find the number of good sequences of length k. As the answer can be rather large print it modulo 1000000007 (109 + 7).
    Input

    The first line of input contains two space-separated integers n, k (1 ≤ n, k ≤ 2000).
    Output

    Output a single integer — the number of good sequences of length k modulo 1000000007 (109 + 7).
    Sample test(s)
    Input

    3 2

    Output

    5

    Input

    6 4

    Output

    39

    Input

    2 1

    Output

    2

    Note

    In the first sample the good sequences are: [1, 1], [2, 2], [3, 3], [1, 2], [1, 3].

    dp[i][j] 长度为i,第i个数为j的方案数

    /*************************************************************************
        > File Name: CF240D.cpp
        > Author: ALex
        > Mail: zchao1995@gmail.com 
        > Created Time: 2015年03月17日 星期二 11时59分48秒
     ************************************************************************/
    
    #include <map>
    #include <set>
    #include <queue>
    #include <stack>
    #include <vector>
    #include <cmath>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    const double pi = acos(-1.0);
    const int inf = 0x3f3f3f3f;
    const double eps = 1e-15;
    typedef long long LL;
    typedef pair <int, int> PLL;
    
    const int mod = 1000000007;
    LL dp[2010][2010];
    
    int main ()
    {
        int n, K;
        while(~scanf("%d%d", &n, &K))
        {
            memset (dp, 0, sizeof(dp));
            for (int i = 1; i <= n; ++i)
            {
                dp[1][i] = 1;
            }
            for (int i = 2; i <= K; ++i)
            {
                for (int j = 1; j <= n; ++j)
                {
                    for (int k = 1; k * k <= j; ++k)
                    {
                        if (j % k == 0)
                        {
                            dp[i][j] += dp[i - 1][k] + (k * k == j ? 0 : dp[i - 1][j / k]);
                            dp[i][j] %= mod;
                        }
                    }
                }
            }
            LL ans = 0;
            for (int i = 1; i <= n; ++i)
            {
                ans += dp[K][i];
                ans %= mod;
            }
            printf("%lld
    ", ans);
        }
        return 0;
    }
  • 相关阅读:
    EasyUI笔记(三)Window窗口
    EasyUI笔记(二)Layout布局
    从零构建Flink SQL计算平台
    从零构建Flink SQL计算平台
    Hystrix压测
    Java对象属性复制备忘
    Java垃圾回收手册翻译
    一次虚拟机升级和参数调整记录
    获取不同虚拟机参数的终极方法
    Dataset数据的XML持久化处理
  • 原文地址:https://www.cnblogs.com/jhcelue/p/7274228.html
Copyright © 2011-2022 走看看