码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 1058 Humble Numbers--DP--(计数器技巧)

时间:2015-06-06 23:34:39      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:hdu   dp   

题意:输出第n大的质因数只有2,3,5,7的数

分析:预处理满足这些条件的数,然后输出dp[n]就行,满足条件的数无非就是2,3,5,7不断的做乘积

这题的关键就是如何把这些乘积从小到大存入数组:设置四个计数器p2,p3,p5,p7完成这个任务

代码:

#include<iostream>
#include<cstdio>
#define min(a,b) (a<b?a:b)
using namespace std;
int n,dp[6000];
void check()
{ 
	int p2,p3,p5,p7;
	p2=p3=p5=p7=1;
	dp[1]=1;
	int i=1;
	while(dp[i]<=2000000000){
		int m1=min(2*dp[p2],3*dp[p3]);
		int m2=min(5*dp[p5],7*dp[p7]);
		int mi=min(m1,m2);
		dp[++i]=mi;
		if(dp[i]==2*dp[p2]) p2++;
		if(dp[i]==3*dp[p3]) p3++;
		if(dp[i]==5*dp[p5]) p5++;
		if(dp[i]==7*dp[p7]) p7++;
	}
}
int main()
{
	check();
	while(cin>>n){
		if(!n) break;
		cout<<"The "<<n;
		if(n%100==11||n%100==12||n%100==13) cout<<"th";
		else if(n%10==1) cout<<"st";
		else if(n%10==2) cout<<"nd";
		else if(n%10==3) cout<<"rd";
		else cout<<"th";
		 cout<<" humble number is "<<dp[n]<<"."<<endl;
	}
}


HDU 1058 Humble Numbers--DP--(计数器技巧)

标签:hdu   dp   

原文地址:http://blog.csdn.net/ac_0_summer/article/details/46392117

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!