考察知识点:枚举

数据范围较小,套三重循环枚举即可。

时间复杂度O(n3)O(n^3)

#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;
}

你也可以用一下快速幂