您的位置:首页 > 其它

HDU 1058 Humble Numbers

2012-09-03 21:07 447 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1058

话说这题是动态规划的吧. 刚开始就想到的是直接暴力, 用一个有序数列.

数列的最开头的数字是最小的,然后将它乘以2,3,5,7后得到的数字放回数列中,同时将第一个数字出列....

然后只要出了5842个数字就刚好了.

set 容器刚好满足 1.去重, 2.排序

View Code

#include <stdio.h>
#include <iostream>
#include <set>
using namespace std;
const int maxn = 5843;
set<long long> ans;
long long temp[maxn];
int main()
{
int i, j, n;
long long k;
temp[1]=1;
ans.insert(2);
ans.insert(3);
ans.insert(5);
ans.insert(7);
set<long long>::iterator iter;
for(i=2;i<=5842;i++)
{
iter = ans.begin();
temp[i] = *iter;
k = *iter;
ans.insert(2*k);
ans.insert(3*k);
ans.insert(5*k);
ans.insert(7*k);
ans.erase(iter);
}
while(~scanf("%d",&n),n){
if(n%100==11 || n%100==12 || n%100==13){
printf("The %dth humble number is %lld.\n",n,temp
);
}
else if(n%10==1){
printf("The %dst humble number is %lld.\n",n,temp
);
}
else if(n%10==2){
printf("The %dnd humble number is %lld.\n",n,temp
);
}
else if(n%10==3){
printf("The %drd humble number is %lld.\n",n,temp
);
}
else{
printf("The %dth humble number is %lld.\n",n,temp
);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: