Problem:
Max Score: 350 Points

Problem Statement

There are N buildings along the line. The i-th building from the left is colored in color i, and its height is currently a_i meters.

Chokudai is a mayor of the city, and he loves colorful thigs. And now he wants to see at least K buildings from the left.

You can increase height of buildings, but it costs 1 yens to increase 1 meters. It means you cannot make building that height is not integer.

You cannot decrease height of buildings.

Calculate the minimum cost of satisfying Chokudai's objective.

Note: "Building i can see from the left" means there are no j exists that (height of building j) ≥ (height of building i) and j < i.

Input Format

N K
a_1 a_2 a_3 ... a_N

Output Format

Print the minimum cost in one line. In the end put a line break.

Constraints

1 ≤ K ≤ N ≤ 15

1 ≤ a_i ≤ 10^9

Scoring

Subtask 1 [120 points]

N = K

Subtask 2 [90 points]

N ≤ 5

a_i ≤ 7

Subtask 3 [140 points]

There are no additional constraints.

Sample Input 1

5 5
3949 3774 3598 3469 3424

Sample Output 1

1541

The optimal solution is (height of buildings from the left) = [3949, 3950, 3951, 3952, 3953].

Sample Input 2

5 3
7 4 2 6 4

Sample Output 2

7

The optimal solution is (height of buildings from the left) = [7, 8, 2, 9, 4].

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

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

typedef long long ll;

ll N,K,a[20],base[20],basic,ans,dp=1e18;

int main(){
    ios_base::sync_with_stdio(0); cin.tie(0);

    cin >> N >> K;
    for(ll i=1;i<=N;i++){
        cin >> a[i];
        base[i] = max(base[i-1],a[i]);          //base[i] = highest building from 1 to i
    }

    for(ll i=(1<<N);i>0;i--){
        ll bits = __builtin_popcount(i);      //count how many bits

        if(bits==K){                            //randomly pick K buildings
            ll head = 31-__builtin_clz(i);      //first building
            basic = (head==N-1)? 0 : base[N-head-1] + 1;    //basic = at least need this height

            ans = 0;
            for(ll j=head;j>=0;j--){
                if(i&(1<<j)){                   //want to see this building
                    if(a[N-j]<=basic){          //not tall enough or ngam ngam tall enough
                        ans += (basic - a[N-j]) + 1;
                        basic++;
                    }
                    else basic = a[N-j];      //taller than basic
                }
            }

            dp = min(ans,dp);
        }
    }

    cout << dp << endl;

    return 0;
}