• HDU 1058 Humble Numbers【DP】


    题意:给出丑数的定义,只含有2,3,5,7这四个素数因子的数称为素数。求第n个丑数。

    可以先观察几个丑数得出规律

    1:dp[1]

    2:min(1*2,1*3,1*5,1*7)

    3:min(2*2,1*3,1*5,1*7)

    4:min(2*2,2*3,1*5,1*7)

    5:min(3*2,2*3,1*5,1*7)

    6:min(3*2,2*3,2*5,1*7)

    7:min(4*2,3*3,2*5,1*7)

    8:min(4*2,3*3,2*5,2*7)

    9:min(5*2,3*3,2*5,2*7)

    然后ppt里面的方程也就好理解了

    dp[i]=min(dp[p1]*2,dp[p2]*3,dp[p3]*5,dp[p4]*7)

    如果选中了哪一个数,对应的伪指针移动1 注意上面的6的情况,如果有两个或两个以上的数和它相等,对应的伪指针都移动1

    然后就是输出的问题了

    1是first

    2是second

    3是third

    4是fourth

    ----

    11是eleventh

    12是twelfth

    13是thirteenth -----

    这一题也是学习的---感觉它的转移方程有一点点不一样---用已经算出来的丑数去推出新的丑数--- 另外输出的时候看了半天(为什么要判断这么多次----5555)原来是因为序数词的后缀不一样(===5555555)

     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<cstring>  
     4 #include<algorithm>  
     5 using namespace std;
     6 
     7 const int maxn=6000+5;
    
     8 int dp[maxn];
     9 
    10 int min(int a,int b,int c,int d)
    11 {
    12     a=a<b?a:b;
    13     b=c<d?c:d;
    14     return a<b?a:b;
    15 }
    16 
    17 int main()
    18 {
    19     int n,i,p1,p2,p3,p4,dp1,dp2,dp3,dp4;
    20     dp[1]=1;
    21     p1=p2=p3=p4=1;
    22     for(i=2;i<=5850;i++)
    23     {
    24         dp1=2*dp[p1];
    25         dp2=3*dp[p2];
    26         dp3=5*dp[p3];
    27         dp4=7*dp[p4];
    28         dp[i]=min(dp1,dp2,dp3,dp4);
    29         if(dp[i]==dp1) p1++;
    30         if(dp[i]==dp2) p2++;
    31         if(dp[i]==dp3) p3++;
    32         if(dp[i]==dp4) p4++;
    33     }
    34     while(scanf("%d",&n)!=EOF&&n)
    35     {
    36         if(n%10==1&&n%100!=11)
    37         printf("The %dst humble number is %d.
    ",n,dp[n]);
    38         else if(n%10==2&&n%100!=12)
    39         printf("The %dnd humble number is %d.
    ",n,dp[n]);
    40         else if(n%10==3&&n%100!=13)
    41         printf("The %drd humble number is %d.
    ",n,dp[n]);
    42         else
    43         printf("The %dth humble number is %d.
    ",n,dp[n]);
    44     }
    45     return 0;
    46 }
    View Code
  • 相关阅读:
    NOI2013 树的计数
    拆系数FFT学习笔记
    HAOI2017 八纵八横——线段树分治+线性基
    BJOI2018链上二次求和——线段树
    [bzoj3514]Codechef MARCH14 GERALD07加强版——lct+主席树
    KD-Tree 学习笔记
    SDOI2010 捉迷藏 —— KD-Tree
    HAOI2018染色——容斥
    gitignore 不起作用的解决办法
    reids学习教程
  • 原文地址:https://www.cnblogs.com/wuyuewoniu/p/4296404.html
Copyright © 2020-2023  润新知