题目被分类为dp,那么这样的解法应该也是dp吧
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1058
注意一下输出格式就好
-
- #include<bits/stdc++.h>
- #define mem(a,x) memset(a,x,sizeof(a))
- #define sqrt(n) sqrt((double)n)
- #define pow(a,b) pow((double)a,(int)b)
- #define inf (1<<29)
- #define NN 5842
- using namespace std;
- const double PI = acos(-1.0);
- typedef long long LL;
-
- LL f[NN+5];
- LL Min(LL a,LL b,LL c,LL d)
- {
- return min(min(a,b),min(c,d));
- }
- void init()
- {
- LL n2,n3,n5,n7;
- n2 = n3 = n5 = n7 = 1;
- f[1] = 1;
- for (int i = 2;i <= NN;++i)
- {
- f[i] = Min(f[n2]*2,f[n3]*3,f[n5]*5,f[n7]*7);
- if (f[i] == f[n2]*2) ++n2;
- if (f[i] == f[n3]*3) ++n3;
- if (f[i] == f[n5]*5) ++n5;
- if (f[i] == f[n7]*7) ++n7;
- }
- }
- int main()
- {
- init();
- int n;
- while (cin>>n)
- {
- if (!n) break;
- if (n%100 == 11||n%100 == 12||n%100 == 13) printf("The %dth humble number is %lld.\n",n,f[n]);
- else if (n%10 == 1) printf("The %dst humble number is %lld.\n",n,f[n]);
- else if (n%10 == 2) printf("The %dnd humble number is %lld.\n",n,f[n]);
- else if (n%10 == 3) printf("The %drd humble number is %lld.\n",n,f[n]);
- else printf("The %dth humble number is %lld.\n",n,f[n]);
- }
- return 0;
- }