f[0]=1;
动规方程 f[i]=min(p1*f[x1],p2*f[x2],p3*f[x3]);
这题用long long 竟然WA
#include<cstdio> #include<iostream> using namespace std; __int64 dp[600000]; __int64 Min(__int64 a,__int64 b,__int64 c) { a=min(a,b); return a=min(a,c); } int main() { __int64 i; __int64 p1,p2,p3,n; while(scanf("%I64d%I64d%I64d%I64d",&p1,&p2,&p3,&n)!=EOF) { __int64 x1,x2,x3; x1=x2=x3=0; dp[0]=1; for(i=1; i<=n; i++) { dp[i]=Min(p1*dp[x1],p2*dp[x2],p3*dp[x3]); if(dp[i]==dp[x1]*p1) x1++; if(dp[i]==dp[x2]*p2) x2++; if(dp[i]==dp[x3]*p3) x3++; } printf("%I64d\n",dp[n]); } }
原文:http://blog.csdn.net/cnh294141800/article/details/19637223