银行的定期存款

银行的定期存款

链接:https://ac.nowcoder.com/acm/problem/15360

题目描述
银行的定期存款一般有1年期、2年期、3年期、5年期四种。
现在我们有1块钱,我们想知道,通过合理安排存款方式,n年以后这1块钱最多会变成几块钱。
假设在这n年里利率不变,且n年以后这笔钱不能处于2年期、3年期、5年期存款年限的中间(否则会变成活期)。
输入描述:
第一行五个数n, r1, r2, r3, r5分别表示年数,1年期年利率,2年期年利率,3年期年利率和5年期年利率。
假设我们有1块钱,i年期存款到期后这1块钱会变成(1 + ri)i块钱。
1 <= n <= 20 且 n为整数,
0.04 <= r1 <= r2 <= r3 <= r5 <= 0.05;
输出描述:
一行一个数表示答案。保留5位小数(绝对误差或相对误差在1e-5之内的结果均判断为通过)。
示例1
输入
8 0.0430 0.0449 0.0458 0.0473
输出
1.44112

dp:分解子问题,求前几年能得到的最大存款,递归得答案

#include
using namespace std;
#define  max(a,b) a>b?a:b
double a[30],b[30];//数组a表示利率,初始为0,让除了1,2,3,5的利率为0;
int main()
{
	int n;
	cin>>n>>a[1]>>a[2]>>a[3]>>a[5];
	b[0]=1;
	for(int i=1;i<=n;i++)
	for(int j=1;j<=i;j++)
	b[i]=max(b[i],b[i-j]*pow((1+a[j]),j));
	printf("%.5lf",b[n]);
	return 0;
}

你可能感兴趣的:(银行的定期存款)