AtCoder Beginner Contest 153

打怪兽专场:https://atcoder.jp/contests/abc153

下文中出现的怪兽被杀死指生命值降至 $0$ 或以下。

A - Serval vs Monster

题意

怪兽生命值为 $h$,每次攻击伤害为 $a$,问怪兽被杀死至少需要攻击多少次。

题解

即计算 $\lceil \frac{h}{a} \rceil$ 。

代码

#include <bits/stdc++.h>
using namespace std;
int main() {
    int h, a; cin >> h >> a;
    cout << (h + a - 1) / a;
}

B - Common Raccoon vs Monster

题意

怪兽生命值为 $h$,给出接下来 $n$ 次攻击的伤害,判断怪兽能否被杀死。

题解

求和判断即可。

代码

#include <bits/stdc++.h>
using namespace std;
int main() {
    int h, n; cin >> h >> n;
    int sum = 0;
    for (int i = 0; i < n; i++) {
        int x; cin >> x;
        sum += x;
    }
    cout << (sum >= h ? "Yes" : "No");
}

C - Fennec vs Monster

题意

给出 $n$ 只怪兽的生命值,每次攻击伤害为 $1$,可以直接杀死最多 $k$ 只怪兽,问最少要攻击多少次才能杀死所有怪兽。

题解

贪心,先直接杀死生命值最多的 $k$ 只怪兽,答案即余下怪兽生命值的总和。

代码

#include <bits/stdc++.h>
using namespace std;
int main() {
    int n, k; cin >> n >> k;
    int h[n] = {};
    for (int i = 0; i < n; i++)
        cin >> h[i];
    sort(h, h + n);
    cout << accumulate(h, h + max(0, n - k), 0LL);
}

D - Caracal vs Monster

题意

初始时有一只怪兽,生命值为 $h$,可以攻击一只怪兽使其分裂为两只生命值为 $\lfloor \frac{h}{2} \rfloor$ 的新怪兽,问至少要攻击多少次才能杀死所有怪兽。

题解

对从 $h$ 至 $0$ 每个途径生命值怪兽的数量求和。

代码

#include <bits/stdc++.h>
using ll = long long;
using namespace std;
int main() {
    ll h; cin >> h;
    ll cnt = 0, num = 1;
    while (h != 0) {
        cnt += num;
        num *= 2, h /= 2;
    }
    cout << cnt << "\n";
}

E - Crested Ibis vs Monster

题意

怪兽生命值为 $h$,有 $n$ 种攻击方式,伤害为 $val_i$,花费为 $cost_i$,同一种攻击方式可重复使用,问杀死怪兽所需的最少花费。

题解

$dp_i$ 为伤害为 $i$ 的最少花费。

代码

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5;
const int INF = 1e9;
const int MAXN = 1e4;

int val[N], cost[N];
int dp[N];

int main() {
    int h, n; cin >> h >> n;
    for (int i = 0; i < n; i++)
        cin >> val[i] >> cost[i];
    fill(dp, dp + N, INF);
    dp[0] = 0;
    for (int i = 0; i < n; i++)
        for (int j = val[i]; j <= MAXN; j++)
            dp[j] = min(dp[j], dp[j - val[i]] + cost[i]);
    cout << *min_element(dp + h, dp + N);
}

 

posted @ 2020-06-16 21:45  Kanoon  阅读(200)  评论(0)    收藏  举报