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
话说这题是动态规划的吧. 刚开始就想到的是直接暴力, 用一个有序数列.
数列的最开头的数字是最小的,然后将它乘以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; }
相关文章推荐
- HDU 1058 Humble Numbers(丑数,优先队列,STL)
- hdu 1058 Humble Numbers【dp】
- hdu 1058 Humble Numbers(优先队列+set)
- HDU 1058:Humble Numbers
- HDU 1058 Humble Numbers
- HDU1058 Humble Numbers
- HDU - 1058 - Humble Numbers 【简单的模拟下即可】
- Hdu 1058 — Humble Numbers
- HDU 1058 Humble Numbers
- HDU 1058 Humble Numbers(dp+greedy)
- hdu 1058 humble numbers
- [ACM] hdu 1058 Humble Numbers
- C - Humble Numbers HDU - 1058
- hdu 1058 Humble Numbers || poj 1338(dp)
- hdu 1058 Humble Numbers
- HDU 1058 Humble Numbers
- hdu 1058 Humble Numbers (DP)
- 杭电 HDU 1058 Humble Numbers
- [ACM] hdu 1058 Humble Numbers
- HDU 1058 Humble Numbers 【DP】