zoukankan      html  css  js  c++  java
  • hdu-1058(动态规划)

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

    题意:求只由2,3,5,7的乘积组成的数,输出格式见output

    思路:开始想打表,后来打表超时。因为数据太大了10^9,所以可以考虑用已知的2,3,5,7来推出之后的数,而不是

    逐个数判断。

    dp思路:从1开始找2,3,5,7倍数中最小的那个,每次找一下哪个数乘了一次,那个数的指针+1;

    注意:输出格式中11,12,13,不是st,nd,rd。

    参考文章:https://blog.csdn.net/ydm1234/article/details/51534932

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    typedef long long LL;
    LL dp[100100];
    int main(void)
    {
        int i,n,a=1,b=1,c=1,d=1;
        dp[1]=1;
        for(i=2;i<=5842;i++)
        {
            dp[i]=min(dp[a]*2,min(dp[b]*3,min(dp[c]*5,dp[d]*7)));
            if(dp[i]==dp[a]*2) a++;
            if(dp[i]==dp[b]*3) b++;
            if(dp[i]==dp[c]*5) c++;
            if(dp[i]==dp[d]*7) d++;
        }
        while(~scanf("%d",&n)&&n)
        {
            int tp=n%10,t=n%100;
            printf("The ");
            if(tp==1&&t!=11) printf("%dst",n);
            else if(tp==2&&t!=12) printf("%dnd",n);
            else if(tp==3&&t!=13) printf("%drd",n);
            else printf("%dth",n);
            printf(" humble number is %lld.
    ",dp[n]);
        }
        return 0;
     } 
  • 相关阅读:
    第二阶段每日总结01
    第十二周进度条
    构建之法阅读笔记05
    找水王01
    第十一周进度条
    第十周进度条
    构建之法阅读笔记04
    第九周进度条
    每日工作总结10
    每日工作总结09
  • 原文地址:https://www.cnblogs.com/2018zxy/p/9748061.html
Copyright © 2011-2022 走看看