先看题目:
贪心地想,就是说每一波怪物基本都是必杀与普通交替的,为什么说基本上呢?因为我们现在怎么做要看上一波有没有留下一次必杀技,是不有有点像背包问题,talk is short,let me show the code
#include<bits/stdc++.h>
using namespace std;
const int N = 100010;
using ll = long long;
ll ans0 = 0, ans1 = 0;
void solve() {
int n, k; cin >> n >> k;
for (int i = 0; i < n; i++) {
ll m, a; cin >> a >> m;
if (a > k) {
ans0 = ans1 = min(ans0 + k, ans1) + 1ll * (a - k) * m;
}
else {
ans0 = min(ans0 + 1ll * (m + 1) / 2 * a, ans1 + 1ll * m / 2 * a);
ans1 = min(ans0 + 1ll * (m + 2) / 2 * a, ans1 + 1ll * (m + 1) / 2 * a);
}
}
cout << min(ans1, ans0) << '\n';
}
signed main() {
std::ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t=1;
//cin >> t;
while (t--)
solve();
}
懒得重新写数组,看了下题解,这样挺方便,反正回滚,每次更新保证最小就行