けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

AtCoder ABC 076 B - Addition and Multiplication (6Q, 灰色, 200 点)

Greedy の本当に初歩の問題といえる。

問題概要

整数 1 がある。この整数に対して、以下のいずれかの操作を  N 回行う。

  • 操作 A:整数値を 2 倍する
  • 操作 B:整数値に  K を足す

操作後の整数値の最小値を求めよ。

制約

  •  1 \le N, K \le 10

考えたこと

基本的に、「もとの数が小さいほど、操作後の整数値も小さい」という性質をもつ操作なので、


毎回の操作において、結果が小さいくなる操作 (A, B のうち) を選ぶ


というようにすればよい。

コード

#include <bits/stdc++.h>
using namespace std;

int main() {
    int N, K;
    cin >> N >> K;

    int res = 1;
    for (int i = 0; i < N; i++) {
        res = min(res * 2, res + K);
    }
    cout << res << endl;
}