参考别人的思路写的,别人的这种算法很给力!
效率很高O(n)的效率
#include <iostream> #include <stdio.h> using namespace std; __int64 ans[1000000]; __int64 getMin(__int64 a,__int64 b,__int64 c) { __int64 rs=0; rs=a<b?a:b; rs=rs<c?rs:c; return rs; } int main() { __int64 a,b,c,M; scanf("%I64d%I64d%I64d%I64d",&a,&b,&c,&M); __int64 a2,a3,a5,i,tmp,n; a2=a3=a5=0; ans[0]=1; for(i=1;i<=M;i++) { tmp=getMin(ans[a2]*a,ans[a3]*b,ans[a5]*c); ans[i]=tmp; if(tmp==ans[a2]*a) ++a2; if(tmp==ans[a3]*b) ++a3; if(tmp==ans[a5]*c) ++a5; } printf("%I64d\n",ans[M]); return 0; }
时间: 2025-01-01 03:04:24