#include
#define max(a,b) (((a)>(b))?(a):(b))
double save[30];int i;
double put_in(double rate,double money,int year)
{
return (double)( ( rate * 0.01 * money * 12.0 * (double) (year) ) + money );
}
int main()
{
save[0]=2000;
for(i=0;i<30;i++)
{
if(i>=1)save[i]=max(put_in(0.63,save[i-1],1),save[i]);
if(i>=2)save[i]=max(put_in(0.66,save[i-2],2),save[i]);
if(i>=3)save[i]=max(put_in(0.69,save[i-3],3),save[i]);
if(i>=5)save[i]=max(put_in(0.75,save[i-5],5),save[i]);
if(i>=8)save[i]=max(put_in(0.84,save[i-8],8),save[i]);
}
printf("%lf",save[20]-save[0]);
}
输出的是20年所得的最多利息
具体过程请DP+memorize