// #include<iostream>
// using namespace std;
// long long num[1000000],a,b,c,pa,pb,pc,n;
// int main()
// {
// cin>>a>>b>>c>>n;
// num[0] = 1;
// pa = pb = pc = 0;
// for (int i =1;i<=n;i++)
// {
// num[i] = min(num[pa]*a, min(num[pb]*b,num[pc]*c));
// if (num[i]==num[pa]*a) pa++;
// if (num[i]==num[pb]*b) pb++;
// if (num[i]==num[pc]*c) pc++;
// }
// cout<<num[n]<<endl;
// return 0;
// }
//8240K 32MS G++
#include <cstdio>
#include <cstring>
using namespace std;
const int MAX = 1000005;
long long factor1;
long long factor2;
long long factor3;
long long num[MAX];
long long ordinalNum;
long long MIN(long long a, long long b) {
return a < b ? a: b;
}
int solve() {
memset(num, 0, sizeof(num));
num[0] = 1;
int p1 = 0;
int p2 = 0;
int p3 = 0;
for (int i = 1; i <= ordinalNum; i++) {
long long minVal = MIN(factor1 * num[p1], MIN(factor2 * num[p2], factor3 * num[p3]));
if (minVal == factor1 * num[p1]) {
p1++;
}
if (minVal == factor2 * num[p2]) {
p2++;
}
if (minVal == factor3 * num[p3]) {
p3++;
}
num[i] = minVal;
}
printf("%lld\n", num[ordinalNum]);
}
int main() {
while(scanf("%lld %lld %lld %lld", &factor1, &factor2, &factor3, &ordinalNum) != EOF) {
solve();
}
}
真是惭愧,早之前是看过这道题的解法的,但是这次再遇到,还是想不起来怎么做 :(.
和poj-1338 poj-2591都是一个类型的,感觉似乎可以算是一种递推的题型吧。