定义代码Hdu 1058 Humble Numbers(dp)

查了好多资料,发现还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧!

    目题接链地址http://acm.hdu.edu.cn/showproblem.php?pid=1058

    如果一个数是Humble Number,那么它的2倍,3倍,5倍,7倍仍然是Humble Number

    定义F[i]为第i个Humble Number

    F[n]

    定义F[i]为第i个Humble Number

    F[n]=min(2*f[i],3*f[j],5*f[k],7*f[L]), i,j,k,L在被选择后互相挪动

    每日一道理
只有启程,才会到达理想和目的地,只有拼搏,才会获得辉煌的成功,只有播种,才会有收获。只有追求,才会品味堂堂正正的人。

    (通过此题懂得到数组有序性特)    

    /*

    这几天测验温习啊,,但是还是要持坚做一道dp的题在睡觉啊,这个还是比较简单的dp题了吧。直接上代码了。

    */

    

#include <cstdio>
const int maxn=5843;
int a[maxn],num;
void init()
{
    //printf("init\n");
    int i,k,l,m,n,x[4],minx;
    m=n=k=l=1;
    a[0]=1;
    for(i=1;i<maxn;i++)
    {
        x[0]=a[m-1]*2;
        x[1]=a[n-1]*3;
        x[2]=a[k-1]*5;
        x[3]=a[l-1]*7;
        minx=x[0];
        if(x[1]<minx)minx=x[1];
        if(x[2]<minx)minx=x[2];
        if(x[3]<minx)minx=x[3];
        a[i]=minx;
        //printf("a[%d]=%d\n",i,a[i]);
        if(minx==x[0])m++;
        if(minx==x[1])n++;
        if(minx==x[2])k++;
        if(minx==x[3])l++;
    }
}
int main()
{
    init();
    while(~scanf("%d",&num),num)
    {
        if(num % 10 == 1 && num % 100 != 11)
            printf("The %dst humble number is %d.\n",num,a[num-1]);
        else if(num % 10 == 2 && num % 100 != 12)
            printf("The %dnd humble number is %d.\n",num,a[num-1]);
        else if(num % 10 == 3 && num % 100 != 13)
            printf("The %drd humble number is %d.\n",num,a[num-1]);
        else
            printf("The %dth humble number is %d.\n",num,a[num-1]);
    }
}

文章结束给大家分享下程序员的一些笑话语录: 警告
有一个小伙子在一个办公大楼的门口抽着烟,一个妇女路过他身边,并对他 说, “你知道不知道这个东西会危害你的健康?我是说, 你有没有注意到香烟 盒上的那个警告(Warning)?”
小伙子说,“没事儿,我是一个程序员”。
那妇女说,“这又怎样?”
程序员说,“我们从来不关心 Warning,只关心 Error”

你可能感兴趣的:(number)