考察知识点:枚举
数据范围较小,套三重循环枚举即可。
时间复杂度:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<pii> vpii;
typedef vector<pll> vpll;
void solve()
{
int n;
double r1, r2, r3, r5;
cin >> n >> r1 >> r2 >> r3 >> r5;
double ans = 0;
for (int x5 = 0; x5 <= n / 5; x5++)
for (int x3 = 0; x3 <= n / 3; x3++)
for (int x2 = 0; x2 <= n / 2; x2++)
{
int x1 = n - x2 * 2 - x3 * 3 - x5 * 5;
if (x1 < 0)
continue;
double tmp = pow(1 + r1, x1) * pow(1 + r2, x2 * 2) * pow(1 + r3, x3 * 3) * pow(1 + r5, x5 * 5);
ans = max(ans, tmp);
}
cout << fixed << setprecision(5) << ans << endl;
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int t = 1;
// cin >> t;
while (t--)
solve();
return 0;
}
你也可以用一下快速幂