cf 240 Mashmokh and ACM

来源:互联网 发布:php项目管理系统源码 编辑:程序博客网 时间:2024/06/05 04:59

拉的一道比赛题。。。当时没做出来~~~~~思路不够清晰。。。

很简单的思想。。。

核心:

 for(int l=1; l<k; l++)            for(int i=1; i<=n; i++)                for(int j=1; i*j<=n; j++)                    map[l+1][i*j]+=map[l][i],map[l+1][i*j]%=mod;

l+1长度的串,最后的数为i*j的情况下,只需往map[l][i]的后面添加一个i的j倍的数即可;枚举i,j;后将长度为k的累加即为所求值;

代码如下:

#include<stdio.h>#include<string.h>#define mod 1000000007int map[2002][2002];int main(){    int n,k;    while(~scanf("%d%d",&n,&k))    {        memset(map,0,sizeof(map));        for(int i=1; i<=n; i++)            map[1][i]=1;        for(int l=1; l<k; l++)            for(int i=1; i<=n; i++)                for(int j=1; i*j<=n; j++)                    map[l+1][i*j]+=map[l][i],map[l+1][i*j]%=mod;        int res=0;        for(int i=1; i<=n; i++)            res+=map[k][i],res%=mod;        printf("%d\n",res);    }    return 0;}


0 0
原创粉丝点击