HDU 1058 Humble Numbers DP

這是一個簡單的DP,但我一上來寫了個錯誤的枚舉,哎,把傻子貼出來示衆啦。。。

#include<iostream>
#include<cstdio>
#include<string.h>
#include<algorithm>
#include<string>
using namespace std;

int n;
long long f[5850];

int main()
{
    f[1]=1;
    for (int i=2; i<=5842; i++)
    {
        long long minn=2000000000;
        for (int j=1; j<i; j++)
        {
            long long tmp1=f[j]*2;
            long long tmp2=f[j]*3;
            long long tmp3=f[j]*5;
            long long tmp4=f[j]*7;
            if (tmp1>f[i-1] && tmp1<minn) minn=tmp1;
            if (tmp2>f[i-1] && tmp2<minn) minn=tmp2;
            if (tmp3>f[i-1] && tmp3<minn) minn=tmp3;
            if (tmp4>f[i-1] && tmp4<minn) minn=tmp4;
        }
        f[i]=minn;
    }
    while (~scanf("%d",&n) && n)
    {
        string str="th";
        if (n%10==1 && n%100!=11) str="st";
        else if (n%10==2 &&n%100!=12) str="nd";
        else if (n%10==3 && n%100!=13) str="rd";
        cout<<"The "<<n<<str<<" humble number is "<<f[n]<<"."<<endl;
    }
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章