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)
#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】的更多相关文章
- HDOJ(HDU).1058 Humble Numbers (DP)
HDOJ(HDU).1058 Humble Numbers (DP) 点我挑战题目 题意分析 水 代码总览 /* Title:HDOJ.1058 Author:pengwill Date:2017-2 ...
- HDU 1058 Humble Numbers (DP)
Humble Numbers Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- hdu 1058:Humble Numbers(动态规划 DP)
Humble Numbers Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- HDU1058 Humble Numbers 【数论】
Humble Numbers Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...
- HDU 1058 Humble Numbers (动规+寻找丑数问题)
Humble Numbers Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...
- Luogu2723丑数Humble Numbers【归并排序】
Luogu2723丑数Humble Numbers 题目背景 对于一给定的素数集合 S = {p1, p2, ..., pK},考虑一个正整数集合,该集合中任一元素的质因数全部属于S.这个正整数集合包 ...
- HDU 1058 Humble Numbers(离线打表)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1058 解题报告:输入一个n,输出第n个质因子只有2,3,5,7的数. 用了离线打表,因为n最大只有58 ...
- hdu 1058 Humble Numbers
这题应该是用dp来做的吧,但一时不想思考了,写了个很暴力的,类似模拟打表,然后排序即可,要注意的是输出的格式,在这里wa了一发,看了别人的代码才知道哪些情况没考虑到. #include<cstd ...
- HDU - 1176 免费馅饼 【DP】
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1176 思路 因为刚开始的起点是固定的 但是终点不是固定的 所以我们可以从终点往起点推 dp[i][j] ...
随机推荐
- sql server 时间
sql server 获取月份天数:1,SELECT 32-DAY(CAST('2015-03-01' as datetime)+32-DAY(CAST('2015-03-01' as datetim ...
- CSLight研究院之学习笔记结合NGUI(一)
原地址:http://www.xuanyusong.com/archives/3088 这两天一直在研究CSLight,目前Unity热更新的方式有两种,一种是ulua这个网上的例子已经很多了.还有一 ...
- VSync Count 垂直同步
原地址:http://blog.csdn.net/yesy10/article/details/7794556 Unity3D中新建一个场景空的时候,帧速率(FPS总是很低),大概在60~70之间.一 ...
- Chapter 5
1. 2模块导入 3.包导入
- iptables使用multiport 添加多个不连续端口 不指定
iptables使用multiport 添加多个不连续端口 碟舞飞扬 , 01:26 , Linux技术 , 评论(0) , 引用(0) , 阅读(12214) , Via 本站原创 大 | 中 ...
- DELPHI 获取本月 的第一天 和 最后一天
USER :DateUtils 使用 StartOfTheMonth 和 EndOfTheMonth 函数获取即可: procedure TForm1.btn1Click(Sender: TObj ...
- BackgroundWorker组件
BackgroundWorker组件封装了后台线程的操作,并且直接利用线程池,无需自己管理线程池等复杂问题. 它主要适用于 比如界面后台加载数据,进度显示,上传下载文件,日月结等 这些都是繁重的劳动, ...
- (一)初探HTML!
想自己动手做一个个人网站,因此,最近在自学PHP,主要看韩顺平老师的教学视频..将自己学习的点点滴滴记录在博客园,希望数月之后,自己可以熟练的运用PHP,也希望各位PHP高手们给予指点,不胜感激!! ...
- Jenkins配置基于角色的项目权限管理--转
本文将介绍如何配置jenkins,使其可以支持基于角色的项目权限管理. 由于jenkins默认的权限管理体系不支持用户组或角色的配置,因此需要安装第三发插件来支持角色的配置,本文将使用Role Str ...
- http://blog.csdn.net/luxiaoyu_sdc/article/details/7333024
http://blog.csdn.net/luxiaoyu_sdc/article/details/7333024 http://blog.csdn.net/kkdelta/article/detai ...