【转】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 main()
{
        int k1, k2, k3, k4, n;
         k1=k2=k3=k4=1;
         num[1]=1;
         for(int i=2; i<Size+1; i++)
         {
                 long long x1=num[k1]*2;
                 long long x2=num[k2]*3;
                 long long x3=num[k3]*5;
                 long long x4=num[k4]*7;

                 long long M1=min(x1, x2);
                 long long M2=min(x3, x4);
                 M1=min(M1, M2);
                 num[i]=M1;
                 if(M1==x1) k1++;
                 if(M1==x2) k2++;
                 if(M1==x3) k3++;
                 if(M1==x4) k4++;
         }
        while(cin>>n&&n!=0)
        {
//                int t=n%10;
//                if(n==11 || n==12 || n==13)
//                    t=n;
                 if(n % 10 == 1 && n % 100 != 11)
                        cout<<"The "<<n<<"st humble number is "<<num[n]<<"."<<endl;
                else if(n % 10 == 2 && n % 100 != 12)
                        cout<<"The "<<n<<"nd humble number is "<<num[n]<<"."<<endl;
                else if(n % 10 == 3 && n % 100 != 13)
                        cout<<"The "<<n<<"rd humble number is "<<num[n]<<"."<<endl;
                else
                        cout<<"The "<<n<<"th humble number is "<<num[n]<<"."<<endl;
//                switch(t)
//                {
//                                case 1: cout<<"The "<<n<<"st humble number is "<<num[n]<<"."<<endl; break;
//                                case 2: cout<<"The "<<n<<"nd humble number is "<<num[n]<<"."<<endl; break;
//                                case 3: cout<<"The "<<n<<"rd humble number is "<<num[n]<<"."<<endl; break;
//                                default:cout<<"The "<<n<<"th humble number is "<<num[n]<<"."<<endl; break;
//                }
        }
        return 0;
}

  

时间: 2024-10-08 05:01:18

【转】HDU 1058 Humble Numbers:寻找丑数问题?DP?的相关文章

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&

hdu1058 Humble Numbers(丑数)

丑数:只包含一定的质因子的数称丑数,例如包含2,3,5.我们就把2,3,4,5,6,8,9,10,12,15........但我们通常把1称作为第一个丑数. 解题思路:我们现在做的这道题,就是以2,3,5,7为质因子,要我们求第n个丑数(以1为第一个丑数),可以采用DP的思想来解决.我们先以array[1]=1为基础,在它乘以质因子取得最小的数为有序数组的第二个,然后依次类推.写出状态转移方程:array[n] = Min(array[n2]*2, array[n3]*3, array[n5]*

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

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(递推)

题目链接: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 (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

hdu 1058 Humble Numbers || poj 1338(dp)

两题都是一样的题目 只是hdu 1058 多了个7 题意:求一个每个数因子仅含2 3 5 7 的 序列 问 第n个数是几 思路: ans[i]=min(min(ans[n2]*2,ans[n3]*3),min(ans[n5]*5,ans[n7]*7)); if(ans[i]==ans[n2]*2) n2++; if(ans[i]==ans[n3]*3) n3++; if(ans[i]==ans[n5]*5) n5++; if(ans[i]==ans[n7]*7) n7++; hdu 1058 #