POJ 2247 小DP?
2015-10-29 20:06
357 查看
题意:定义H***数为质因子仅有2、3、5、7的数以及1,将所有的H***数排序,输出序列中第n个H***数。
说是DP。。也看不出来啥DP的特征,Openjudge是把这题分到DP一类里了。因为H***数仅由特定的质因子构成,所以每一个H***数都可以由已知的H***数乘2、3、5、7得来。我们预处理出数据范围n以内的所有H***数,O(1)查询。处理方式很简单,代码易懂。
唯一比较恶心的就是这道题的输出方式,考验英语基本功。→.→
说是DP。。也看不出来啥DP的特征,Openjudge是把这题分到DP一类里了。因为H***数仅由特定的质因子构成,所以每一个H***数都可以由已知的H***数乘2、3、5、7得来。我们预处理出数据范围n以内的所有H***数,O(1)查询。处理方式很简单,代码易懂。
唯一比较恶心的就是这道题的输出方式,考验英语基本功。→.→
#include <cstdio> #include <algorithm> #include <cstring> using namespace std; int n, p2, p3, p5, p7, f[5845]; int main() { f[1] = n = p2 = p3 = p5 = p7 = 1; while(n < 5845) { f[++n] = min(min(f[p2]*2, f[p3]*3), min(f[p5]*5, f[p7]*7)); if(f ==f[p2]*2) p2++; if(f ==f[p3]*3) p3++; if(f ==f[p5]*5) p5++; if(f ==f[p7]*7) p7++; } while(scanf("%d", &n) && n) { printf("The %d",n); if (n%10==1 && n/10%10!=1) printf("st"); else if (n%10==2 && n/10%10!=1) printf("nd"); else if (n%10==3 && n/10%10!=1) printf("rd"); else printf("th"); printf(" humble number is %d.\n",f ); } return 0; }
相关文章推荐
- C#.NET 中visual studio生成的.pdb/ .vshost.exe/ .vshost.exe.manifest文件是什么
- Android设备信息、感应器检测
- 第九周项目2-对称矩阵压缩存储的实现与应用(2)
- 经典算法题每日演练——第三题 猴子吃桃
- 径向基函数(RBF)神经网络
- 十月份英语学习——出现了一个小插曲
- multithreading--守护(后台)线程的作用,及其与前台线程的关系
- 分享到微信的消息跳转到第三方APP
- 第九周--项目3稀疏矩阵的三元组表示的实现及应用(1)
- 查找后台的几种方法
- SSH面试集锦——不看后悔哦!
- 图像处理基础知识(一)
- C#入门--索引器
- [Object C]_[初级]_[两个数组共有元素的提取,删除,数组的合并]
- Spring学习3--基于注解的组件扫描
- Introduction
- Python总结
- 《点石成金:访客至上的Web和可用性设计秘笈(原书第3版)》--- 读书笔记
- cento7 安装telnet
- 1到4组成不相同的3位数