HDU 1058 Humble Number DP
2013-05-19 14:26
323 查看
好好做专题系列= =
DP第一题
【题意】因子只有{2、3、5、7}中一个或多个的数称为Humble Number,从小到大将它们排成数列,求第n个Humble Number。
这是前20个Humble Number {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27}
【分析】因为因子只有2、3、5、7,即num = 2^a * 3^b * 5^c * 7^d
所以后面的每个数都等于前面某个已算出的乘以2、3、5或7。
还不明白?
于是可用一个比较巧妙的方法递推打表(非原创= =)
所以,这题技巧性大于动态规划的思想= =
DP第一题
【题意】因子只有{2、3、5、7}中一个或多个的数称为Humble Number,从小到大将它们排成数列,求第n个Humble Number。
这是前20个Humble Number {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27}
【分析】因为因子只有2、3、5、7,即num = 2^a * 3^b * 5^c * 7^d
所以后面的每个数都等于前面某个已算出的乘以2、3、5或7。
还不明白?
于是可用一个比较巧妙的方法递推打表(非原创= =)
#include <iostream> using namespace std; #define N 6000 int ans = {0,1}; int a[] = {1, 1, 1, 1}; int Min(int b, int c, int d, int e) { if(c<b) b = c; if(d<b) b = d; if(e<b) b = e; return b; } int main() { int n; //求Humble数,每循环一次求出一个 //a[0]~a[3]保存的分别是2、3、5、7乘到哪一个数 for(int i=2; i<=5842; i++) { int b = ans[a[0]]*2; int c = ans[a[1]]*3; int d = ans[a[2]]*5; int e = ans[a[3]]*7; ans[i] = Min(b, c, d, e);//选最小的 if(ans[i] == b) a[0]++; if(ans[i] == c) a[1]++; if(ans[i] == d) a[2]++; if(ans[i] == e) a[3]++; } while(scanf("%d",&n),n) { if(n==0) break; if(n%100==11 || n%100==12 || n%100==13) printf("The %dth", n); else if(n%10==1) printf("The %dst",n); else if(n%10==2) printf("The %dnd",n); else if(n%10==3) printf("The %drd",n); else printf("The %dth",n); printf(" humble number is %d.\n",ans ); } return 0; }
所以,这题技巧性大于动态规划的思想= =
相关文章推荐
- HDU 1058 Humble Number(打表dp)
- 丑数(humble number) hdu 1058 DP
- HDU 1058 Humble Numbers dp
- hdu 1058(简单dp)Humble Numbers
- hdu 1058 Humble Numbers【dp】
- 【HDU】1058 - Humble Numbers(dp)
- hdu 1058 humble number
- HDU_1058 Humble Numbers(DP)
- HDU 1058 Humble Numbers【DP】
- HDOJ(HDU).1058 Humble Numbers (DP)
- hdu 1058 Humble Numbers(dp)
- HDU 1058 Humble Numbers(dp)
- hdu 1058 dp.Humble Numbers
- hdu 1058 Humble Numbers (DP)
- 定义代码Hdu 1058 Humble Numbers(dp)
- HDU 1058 Humble Numbers && NOJ 1420 丑数 (数位dp)
- hdu 1058 Humble Numbers(dp)
- HDU 1058Humble Numbers(dp)
- HDU 1058 Humble Numbers(DP,数)
- hdu1058 Humble Numbers--DP