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;
    }
  • 相关阅读:
    MEF(Managed Extensibility Framework ) 可控扩展框架
    如何打开ASP.NET Configuration页面
    [转贴]技术的乐趣
    ORM工具介绍 NHibernate, EntitySpaces, and LLBLGen Pro 功能分析
    Linq to SQL 学习路线图
    [转贴]What is AntiPattern 什么是反模式
    Master Data Management(MDM)主数据管理
    Introducing Unity Application Block
    C#2.0 C#3.0 语言特性
    javascript声明数组三种方式
  • 原文地址:https://www.cnblogs.com/jhcelue/p/7274228.html
Copyright © 2011-2022 走看看