您的位置:首页 > 编程语言

定义代码Hdu 1058 Humble Numbers(dp)

2013-05-05 22:15 417 查看
查了好多资料,发现还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧!

目题接链地址http://acm.hdu.edu.cn/showproblem.php?pid=1058

如果一个数是Humble Number,那么它的2倍,3倍,5倍,7倍仍然是Humble Number

定义F[i]为第i个Humble Number

F

定义F[i]为第i个Humble Number

F
=min(2*f[i],3*f[j],5*f[k],7*f[L]), i,j,k,L在被选择后互相挪动

每日一道理

只有启程,才会到达理想和目的地,只有拼搏,才会获得辉煌的成功,只有播种,才会有收获。只有追求,才会品味堂堂正正的人。

(通过此题懂得到数组有序性特)

/*

这几天测验温习啊,,但是还是要持坚做一道dp的题在睡觉啊,这个还是比较简单的dp题了吧。直接上代码了。

*/

#include <cstdio>
const int maxn=5843;
int a[maxn],num;
void init()
{
//printf("init\n");
int i,k,l,m,n,x[4],minx;
m=n=k=l=1;
a[0]=1;
for(i=1;i<maxn;i++)
{
x[0]=a[m-1]*2;
x[1]=a[n-1]*3;
x[2]=a[k-1]*5;
x[3]=a[l-1]*7;
minx=x[0];
if(x[1]<minx)minx=x[1];
if(x[2]<minx)minx=x[2];
if(x[3]<minx)minx=x[3];
a[i]=minx;
//printf("a[%d]=%d\n",i,a[i]);
if(minx==x[0])m++;
if(minx==x[1])n++;
if(minx==x[2])k++;
if(minx==x[3])l++;
}
}
int main()
{
init();
while(~scanf("%d",&num),num)
{
if(num % 10 == 1 && num % 100 != 11)
printf("The %dst humble number is %d.\n",num,a[num-1]);
else if(num % 10 == 2 && num % 100 != 12)
printf("The %dnd humble number is %d.\n",num,a[num-1]);
else if(num % 10 == 3 && num % 100 != 13)
printf("The %drd humble number is %d.\n",num,a[num-1]);
else
printf("The %dth humble number is %d.\n",num,a[num-1]);
}
}

文章结束给大家分享下程序员的一些笑话语录: 警告

有一个小伙子在一个办公大楼的门口抽着烟,一个妇女路过他身边,并对他 说, “你知道不知道这个东西会危害你的健康?我是说, 你有没有注意到香烟 盒上的那个警告(Warning)?”

小伙子说,“没事儿,我是一个程序员”。

那妇女说,“这又怎样?”

程序员说,“我们从来不关心 Warning,只关心 Error”
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: