Top

(ΦωΦ)<これの答えですよー。目次はここ

---
問2-1
#include <iostream>
#include <algorithm>
using namespace std;

const int inf = 987654321;

int main(void) {
  int h, a, d; scanf("%d%d%d", &h, &a, &d);
  vector<double> dp(h+1, inf);
  dp[0] = 0; // 与ダメージ0のときの攻撃回数は0
  for(int i=0; i<h; i++) {
    // 通常攻撃
    int x = min(h, i+a); // 与ダメージiのときにダメージaの攻撃を与えた場合、与ダメージxはこうなる。
    dp[x] = min(dp[x], dp[i] + 1); // 与ダメージiのときにダメージaの通常攻撃を与えた場合、攻撃回数は1回増える。
    // 必殺攻撃
    int y = min(h, i+d);
    dp[y] = min(dp[y], dp[i] + 1.5);
  }
  double res = dp[h]; // 与ダメージhで敵は倒れる。
  printf("%lf\n", res);
  return 0;
}
    

(ΦωΦ)<おしまい