HDU 1058Humble Numbers(dp)

题目被分类为dp,那么这样的解法应该也是dp吧


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

注意一下输出格式就好

[cpp]  view plain  copy
  1. //Must so  
  2. #include<bits/stdc++.h>  
  3. #define mem(a,x) memset(a,x,sizeof(a))  
  4. #define sqrt(n) sqrt((double)n)  
  5. #define pow(a,b) pow((double)a,(int)b)  
  6. #define inf (1<<29)  
  7. #define NN 5842  
  8. using namespace std;  
  9. const double PI = acos(-1.0);  
  10. typedef long long LL;  
  11.   
  12. LL f[NN+5];  
  13. LL Min(LL a,LL b,LL c,LL d)  
  14. {  
  15.     return min(min(a,b),min(c,d));  
  16. }  
  17. void init()  
  18. {  
  19.     LL n2,n3,n5,n7;  
  20.     n2 = n3 = n5 = n7 = 1;  
  21.     f[1] = 1;  
  22.     for (int i = 2;i <= NN;++i)  
  23.     {  
  24.         f[i] = Min(f[n2]*2,f[n3]*3,f[n5]*5,f[n7]*7);  
  25.         if (f[i] == f[n2]*2) ++n2;  
  26.         if (f[i] == f[n3]*3) ++n3;  
  27.         if (f[i] == f[n5]*5) ++n5;  
  28.         if (f[i] == f[n7]*7) ++n7;  
  29.     }  
  30. }  
  31. int main()  
  32. {  
  33.     init();  
  34.     int n;  
  35.     while (cin>>n)  
  36.     {  
  37.         if (!n) break;  
  38.         if (n%100 == 11||n%100 == 12||n%100 == 13) printf("The %dth humble number is %lld.\n",n,f[n]);  
  39.         else if (n%10 == 1) printf("The %dst humble number is %lld.\n",n,f[n]);  
  40.         else if (n%10 == 2) printf("The %dnd humble number is %lld.\n",n,f[n]);  
  41.         else if (n%10 == 3) printf("The %drd humble number is %lld.\n",n,f[n]);  
  42.         else printf("The %dth humble number is %lld.\n",n,f[n]);  
  43.     }  
  44.     return 0;  
  45. }  

你可能感兴趣的:(HDU 1058Humble Numbers(dp))