性质一: 加减操作不能相邻。
性质二: 不能连续出现加法操作。
$f_i$ 表示从 $0$ 转移到 $i$ 的最少代价。三种方式每种都写。
$f_i = \min({ f_i, f_{i - 1} + x , f_{i + 1} + x })$
$f_{i \times 2} = \min({ f_{i \times 2}, f_i + y })$
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 2e7 + 10;
int n, x, y, f[N];
signed main()
{
cin >> n >> x >> y;
memset(f, 0x3f, sizeof f);
f[0] = 0;
for (int i = 1; i <= n; i++)
{
f[i] = min(f[i], f[i - 1] + x);
f[i] = min(f[i], f[i + 1] + x);
f[i * 2] = min(f[i * 2], f[i] + y);
}
cout << f[n] << endl;
}
this
这里面有,翻翻