给出p1,p2,p3 ,求第k个大的由这三个数得到的数
动态规划的一个简单问题
第k个数是由前k-1个数中的一个乘p1,p2,p3中的一个得到的
故 用a,b,c来保存三个数取到了多少个
dp[i]=min(p1*dp[a],min(p2*dp[b],p3*dp[c]));
代码:
#include <stdio.h>
#include <string.h>
long long p1,p2,p3,hi;
long long dp[10000];
long long mymin(long long a,long long b)
{
return a>b?b:a;
}
int main()
{
while(scanf("%lld %lld %lld %lld",&p1,&p2,&p3,&hi)!=EOF)
{
memset(dp,0,sizeof(dp));
int a=0,b=0,c=0,num=0;
dp[0]=1;
while(1)
{
long long temp=mymin(p1*dp[a],mymin(p2*dp[b],p3*dp[c]));
if(temp==p1*dp[a])
a++;
if(temp==p2*dp[b])
b++;
if(temp==p3*dp[c])
c++;
num++;
dp[num]=temp;
if(num==hi)
break;
}
printf("%lld\n",dp[hi]);
}
return 0;
}