题解:AT_abc410_e [ABC410E] Battles in a Row
whisper_free_Evil · · 题解
原题
题意
给定一个生命值和魔法值还有
思路
这题很明显是 dp,但是状态
时空复杂度
时间复杂度:
空间复杂度:
代码
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 3e3 + 3;
const int INF = 1e9;
int n, h, m, a[N], b[N], dp[N][N], ans;
int main() {
ios::sync_with_stdio(0), cin.tie(0);
cin >> n >> h >> m;
for (int i = 1; i <= n; i++) {
cin >> a[i] >> b[i];
}
for (int i = 1; i <= n; i++) {
bool f = 0;
for (int j = 0; j <= h; j++) {
dp[i][j] = dp[i - 1][j] + b[i]; // 使用魔法
if (j >= a[i]) {
dp[i][j] = min(dp[i][j], dp[i - 1][j - a[i]]); // 使用生命
}
f |= dp[i][j] <= m; // 判断这个怪物能不能打败
}
ans += f;
if (!f) {
break;
}
}
cout << ans;
return 0;
}