题意:给出丑数的定义,只含有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)

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; const int maxn=+; int dp[maxn]; int min(int a,int b,int c,int d)
{
a=a<b?a:b;
b=c<d?c:d;
return a<b?a:b;
} int main()
{
int n,i,p1,p2,p3,p4,dp1,dp2,dp3,dp4;
dp[]=;
p1=p2=p3=p4=;
for(i=;i<=;i++)
{
dp1=*dp[p1];
dp2=*dp[p2];
dp3=*dp[p3];
dp4=*dp[p4];
dp[i]=min(dp1,dp2,dp3,dp4);
if(dp[i]==dp1) p1++;
if(dp[i]==dp2) p2++;
if(dp[i]==dp3) p3++;
if(dp[i]==dp4) p4++;
}
while(scanf("%d",&n)!=EOF&&n)
{
if(n%==&&n%!=)
printf("The %dst humble number is %d.\n",n,dp[n]);
else if(n%==&&n%!=)
printf("The %dnd humble number is %d.\n",n,dp[n]);
else if(n%==&&n%!=)
printf("The %drd humble number is %d.\n",n,dp[n]);
else
printf("The %dth humble number is %d.\n",n,dp[n]);
}
return ;
}

HDU 1058 Humble Numbers【DP】的更多相关文章

  1. HDOJ(HDU).1058 Humble Numbers (DP)

    HDOJ(HDU).1058 Humble Numbers (DP) 点我挑战题目 题意分析 水 代码总览 /* Title:HDOJ.1058 Author:pengwill Date:2017-2 ...

  2. HDU 1058 Humble Numbers (DP)

    Humble Numbers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  3. hdu 1058:Humble Numbers(动态规划 DP)

    Humble Numbers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  4. HDU1058 Humble Numbers 【数论】

    Humble Numbers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T ...

  5. HDU 1058 Humble Numbers (动规+寻找丑数问题)

    Humble Numbers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T ...

  6. Luogu2723丑数Humble Numbers【归并排序】

    Luogu2723丑数Humble Numbers 题目背景 对于一给定的素数集合 S = {p1, p2, ..., pK},考虑一个正整数集合,该集合中任一元素的质因数全部属于S.这个正整数集合包 ...

  7. HDU 1058 Humble Numbers(离线打表)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1058 解题报告:输入一个n,输出第n个质因子只有2,3,5,7的数. 用了离线打表,因为n最大只有58 ...

  8. hdu 1058 Humble Numbers

    这题应该是用dp来做的吧,但一时不想思考了,写了个很暴力的,类似模拟打表,然后排序即可,要注意的是输出的格式,在这里wa了一发,看了别人的代码才知道哪些情况没考虑到. #include<cstd ...

  9. HDU - 1176 免费馅饼 【DP】

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1176 思路 因为刚开始的起点是固定的 但是终点不是固定的 所以我们可以从终点往起点推 dp[i][j] ...

随机推荐

  1. 使用命令行编译、打包、运行WordCount--不用eclipse

    1)首先创建WordCount1023文件夹,然后在此目录下使用编辑器,例如vim编写WordCount源文件,并保存为WordCount.java文件 /** * Licensed under th ...

  2. android:scaleType属性

    android:scaleType是控制图片如何resized/moved来匹对ImageView的size. ImageView.ScaleType / android:scaleType值的意义区 ...

  3. sematext

    https://sematext.atlassian.net/wiki/display/PUBLOGSENE/Syslog

  4. Windows启动系统程序命令

    DEVMGMT.MSC - Device Manager 设备管理器 DISKMGMT.MSC - Disk Management 磁盘管理   WindowsXP常用命令http://baike.b ...

  5. UVA 11076 Add Again 计算对答案的贡献+组合数学

    A pair of numbers has a unique LCM but a single number can be the LCM of more than one possiblepairs ...

  6. lintcode:交错正负数

    交错正负数 给出一个含有正整数和负整数的数组,重新排列成一个正负数交错的数组. 注意事项 不需要保持正整数或者负整数原来的顺序. 样例 给出数组[-1, -2, -3, 4, 5, 6],重新排序之后 ...

  7. 【Apache运维基础(4)】Apache的Rewrite攻略(1)

    简述 Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言.可基于服务器级的(httpd.conf)和目录级的 (.htaccess)两种方式.如果要想用到rewrite模块 ...

  8. Java-在线聊天系统-线程

    一.概述 1.目标:在上一个版本非线程的聊天系统中,出于要不断监听接收新client和接收client发出的信息,把accept()和DataInputStream.readUTF()分别写在了whi ...

  9. Linux命令-yum

    定义 yum仓库是为进一步简化RPM管理软件难而设计的,yum能够根据用户的要求分析出所需软件包以及相关依赖关系,自动从服务器下载软件包并安装到系统. 实例

  10. Excel有用的宏

    =Index({"同事","同学","亲戚"},b3) 前面的array默认索引从1开始. 如果b3为1.而枚举数组是: 0=>同事, ...