您的位置:首页 > 其它

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)查询。处理方式很简单,代码易懂。

唯一比较恶心的就是这道题的输出方式,考验英语基本功。→.→

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: