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;
    }
  • 相关阅读:
    C# 字典类 Dictionary 基本用法 Mark
    SQL语句监测耗时
    jQuery Select Option 操作 删除新增
    C# DataTable 过滤重复数据
    IE8 overflow:hidden 无效问题解决方案
    动态拼接LINQ 查询条件
    解决.net中"未能创建 Mutex”异常
    创建Cookies 包含子健和无子健的创建及用法 做个笔记留着参考
    常用的一些加密算法,留着以备不时之需
    Centos7 nginx安装
  • 原文地址:https://www.cnblogs.com/jhcelue/p/7274228.html
Copyright © 2011-2022 走看看