TechFUL: Building Destruction
問題概要
個のビルが左右一列に並んでいる.
番目のビルは 個のブロックから構成されている.
Tech ちゃんは火力が の爆弾でビルのブロックを破壊しようとしている.
破壊の方法は 通りあり、 番目の破壊の仕方は次の通り.
- 位置 のビルに 個の爆弾を置き、 番目のビルのブロックを 個破壊する.
ただし、破壊後のビルのブロックの個数が 個以下となるような破壊の仕方は認められないものとする.
このとき、Tech ちゃんの報酬は である.
報酬の最大値を求めよ.
制約
解法
まず、結論をいうと が答えである.
以下に正当性を示す.
火力 の爆弾で、 番目の破壊の仕方が認められるとする.
このとき、が成り立つ.
が成り立つため 番目の破壊の仕方も認められる.
同様に、 番目の破壊の仕方も認められる.
番目の破壊の仕方が認められず、 番目の破壊の仕方が認められるとき、報酬は である.
番目の破壊の仕方だと、 番目のビルの残りのブロックは となる.
番目の破壊の仕方が認められるには、最低でも を満たす必要がある.
よって、 となり、報酬の上界が と分かる.
のとき、 番目の破壊の仕方のみ認められる.
このとき、報酬は上界 を達成するため、報酬の最大値は となる.
#include <bits/stdc++.h> using namespace std; int main() { int N; cin >> N; vector<int> h(N); for (int i = 0; i < N; ++i) cin >> h[i]; cout << h[N - 1] - 1 << endl; }