我记得这道题以前写过,而且是写出来了。DP吧。
然后现在想了好久。。。没想出来。。。。 然后考虑一下递推。。mdzz…直接就是让之前的这个每次乘以2,3,5就好了嘛,然后每轮取最小。//#include#include #include #include #include #include using namespace std;typedef long long LL;typedef unsigned long long ULL;const double eps=1e-6;const double pi=acos(-1.0);const int mod=998244353;const LL INF=0x3f3f3f3f;const int N=1e3+555;LL dp[N];void INIT(){ LL k,p1,p2,p3,p4; int i,j; dp[1]=1; for(i=2;i<=1500;i++){ k=INF; for(j=1;j dp[i-1]){ k=min(k,p1); } if(p2>dp[i-1]){ k=min(k,p2); } if(p3>dp[i-1]){ k=min(k,p3); } } dp[i]=k; }}int main(){ INIT(); int n; while(~scanf("%d",&n)&&n){ printf("%lld\n",dp[n]); }}