您的位置:首页 > 其它

Mashmokh and ACM

2015-12-01 21:23 253 查看
题目描述:

Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u

Submit

Status

Description

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 Input

Input

3 2

Output

5

Input

6 4

Output

39

Input

2 1

Output

2

Hint

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

代码实现:

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>

using namespace std;

int dp[2005][2005];
int main()
{
int n,k;
int ans;
while(scanf("%d%d",&n,&k)!=EOF)
{
memset(dp,0,sizeof(dp));
ans=0;
for(int i=1;i<=n;i++)
{
dp[1][i]=1;
}
for(int i=1; i<=n; i++)//i每变动一次dp[]数组元素就会更新一次
{
for(int t=1; t<k; t++)-
{
for(int j=1; i*j<=n; j++)
{
dp[t+1][i*j]+=dp[t][i];
dp[t+1][i*j]=dp[t+1][i*j]%(int)(1e9+7);
}
}
}
for(int i=1; i<=n; i++)
{
ans+=dp[k][i];
ans=ans%(int)(1e9+7);
}
printf("%d\n",ans);
}
return 0;
}


写完代码,去睡觉。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: