(HDU)1058 --Humble Numbers( 丑数)

题目链接:http://vjudge.net/problem/HDU-1058

这题有点难度,自己写了半天依旧TLE,参考了其他人的博客。

http://blog.csdn.net/pythonfx/article/details/7292835

http://blog.csdn.net/x_iya/article/details/8774087

第二个人的博客用的是DP,放在基础题里面不大合适。

 1 #include <stdio.h>
 2 int f[5843],n;
 3 int i,j,k,l;
 4
 5 int min(int a,int b,int c,int d){
 6     int min=a;
 7     if(b<min) min=b;
 8     if(c<min) min=c;
 9     if(d<min) min=d;
10
11     if(a==min) i++;
12     if(b==min) j++;
13     if(c==min) k++;
14     if(d==min) l++;
15
16     return min;
17 }
18
19 int main(){
20     i=j=k=l=1;
21     f[1]=1;
22     for(int t=2;t<=5842;t++)
23         f[t]=min(2*f[i],3*f[j],5*f[k],7*f[l]);
24
25     while(scanf("%d",&n)&&n!=0){
26         if(n%10==1&&n%100!=11)
27             printf("The %dst humble number is %d.\n",n,f[n]);
28         else if(n%10==2&&n%100!=12)
29             printf("The %dnd humble number is %d.\n",n,f[n]);
30         else if(n%10==3&&n%100!=13)
31             printf("The %drd humble number is %d.\n",n,f[n]);
32         else
33             printf("The %dth humble number is %d.\n",n,f[n]);
34     }
35     return 0;
36 }

 1 #include <iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 long long f[6000];
 7 int main()
 8 {
 9     int n;
10     int prime[4]={2,3,5,7};
11     f[1]=1;
12     for(int i=2;i<=5842;i++)
13     {
14         f[i]=2000000001;
15         for(int j=0;j<4;j++)
16         {
17             for(int k=i-1;k>0;k--)
18             {
19                 if(f[k]*prime[j]<=f[i-1])
20                     break;
21                 if(f[k]*prime[j]<f[i])//?????????
22                     f[i]=f[k]*prime[j];
23             }
24         }
25     }
26     while(scanf("%d",&n),n)
27     {
28         if(n%10==1&&n%100!=11)
29             printf("The %dst humble number is %lld.\n",n,f[n]);
30         else if(n%10==2&&n%100!=12)
31             printf("The %dnd humble number is %lld.\n",n,f[n]);
32         else if(n%10==3&&n%100!=13)
33             printf("The %drd humble number is %lld.\n",n,f[n]);
34         else
35             printf("The %dth humble number is %lld.\n",n,f[n]);
36     }
37     return 0;
38 }

时间: 2024-10-20 06:17:13

(HDU)1058 --Humble Numbers( 丑数)的相关文章

HDU 1058 Humble Numbers(DP,数)

题意  所有只能被2,3,5,7这4个素数整除的数称为Humble Number  输入n  输出第n个Humble Number 1是第一个humble number  对于一个Humble Number  a  有2*a,3*a,5*a,7*a都是Humble Number  可以以1为基数  依次展开即可得到一定范围内的Humble Number 用i,j,k,l分别记录 2,3,5,7分别乘到了第几个Humble Number  当前在计算第cnt个Humble Number  那么有

HDU 1058 Humble Numbers (打表)

题目链接:HDU 1058 Humble Numbers 题意:一些数他们的素数因子只有2,3,5,7.求这些数. 因为这些数的因子只可能是2,3,5,7.所以通过2,3,5,7这个四个数构造这个数列,这个数列靠后的数必定是前面的数乘上2,3,5,7得到. AC代码: #include<stdio.h> #include<set> #define ll __int64 using namespace std; set<ll> s; set<ll>::iter

HDU 1058 Humble Numbers (dp+打表)

先是想筛法素数表啊,然后1~2000000000枚举打表啊,结果越想越不对. 后来想到唯一分解定理,可是怎么实现呢..果然还是需要努力啊.. 研究了discuss代码,码之~ ~~~~ dp的思想,若dp[i]是Humble Numbers,那么dp[i]*2,dp[i]*3,dp[i]*5,dp[i]*7都将是Humble Numbers. 所以只需要注意连续性便好了. #include<cstdio> #include<algorithm> #include<cmath&

HDU 1058 Humble Numbers(递推)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1058 题意:丑数是指只有2,3,5 or 7这几个素因数的数(所以1也是丑数),找到第n个丑数. 思路:除了2,3,5,7任何一个丑数都是由另一个丑数乘上2,或3,或5,或7得到的. 所以可以用优先队列,每取出一个丑数就入队他们乘上2,3,5,7得到的四个丑数,这样每个丑数都生成了.复杂度还是不错的,不过按这种方法会生成比较大的数,最终爆掉int,所以要用long long //93MS 1228K

HDU 1058 Humble Numbers &amp;&amp; NOJ 1420 丑数 (数位dp)

Humble Numbers                          Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)                                          Total Submission(s): 18555    Accepted Submission(s): 8080 Problem Description A numb

【转】HDU 1058 Humble Numbers:寻找丑数问题?DP?

这个和上一道HDU 3199 Hamming Problem是类似的,有了思路就开始码代码了,可是!序数词的写法不对(代码注释部分)又上网普及了序数词的写法··· 搜到其他解题报告 其中有把这道题分类为DP的,最优子结构?无后效性? 还有“寻找丑数问题” 详情点这里. #include<iostream> #include<cstdio> using namespace std; const int Size=5842; long long num[Size+1]; int mai

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

Humble Numbers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 16742    Accepted Submission(s): 7280 Problem Description A number whose only prime factors are 2,3,5 or 7 is called a humble numb

Humble Numbers(丑数) 超详解!

给定一个素数集合 S = { p[1],p[2],...,p[k] },大于 1 且素因子都属于 S 的数我们成为丑数(Humble Numbers or Ugly Numbers),记第 n 大的丑数为 h[n]. 算法 1: 一种最容易想到的方法当然就是从 2 开始一个一个的判断一个数是否为丑数.这种方法的复杂度约为 O( k * h[n]),铁定超时(如果你这样做而没有超时,请跟 tenshi 联系) 算法 2: 看来只有一个一个地主动生成丑数了 : 我最早做这题的时候,用的是一种比较烂的

HDU 1058 Humble Numbers (DP)

Humble Numbers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 18238    Accepted Submission(s): 7934 Problem Description A number whose only prime factors are 2,3,5 or 7 is called a humble numbe