Acwing加减乘

· · 个人记录

Acwing加减乘

#include <set>
#include <map>
#include <queue>
#include <cmath>
#include <cstring>
#include <numeric>
#include <iostream>
#include <algorithm>
#include <unordered_set>
#include <unordered_map>

//#define int LL
#define endl '\n'
#define big_heap(T) priority_queue<T>
#define small_heap(T) priority_queue<T, vector<T>, greater<>>

using namespace std;

typedef long long LL;
typedef pair<LL, LL> PLL;
typedef pair<int, LL> PIL;
typedef pair<LL, int> PLI;
typedef pair<int, int> PII;
typedef unsigned long long ULL;
typedef pair<double, double> PDD;

const double EXP = 1e-8;
const int mod = 998244353;
const int INF = 0x3f3f3f3f;
const LL LNF = 0x3f3f3f3f3f3f3f3f;
void IOS() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
}

void solve() {
    int n, x, y;
    cin >> n >> x >> y;
    vector<LL> f(n + 10, LNF);
    f[0] = 0;
    for (int i = 1; i <= n; i ++ ) {
        if (i % 2) {
            f[i] = min(f[i - 1] + x, f[(i + 1) / 2] + x + y);
        } else f[i] = min(f[i - 1] + x, f[i / 2] + y);
    }
    cout << f[n] << endl;
}

signed main() {
    IOS();
    int T = 1;
//    cin >> T;
    while (T--) {
        solve();
    }
    return 0;
}