#include <bits/stdc++.h>
using namespace std;
const int INF = 1E9;
int n, A[5005];
int DP[5005][5005][2];
int f(int curr, int nBukit, bool prev) {
  if (nBukit == 0) return 0;
  if (curr >= n) {
    return INF;
  }
  int &ret = DP[curr][nBukit][prev];
  if (ret != -1) return ret;
  ret = INF;
  int valuePrev, valueNow, diff;
  bool next = false;
  if (prev) {
    valuePrev = A[curr - 2] - 1;
  } else {
    valuePrev = A[curr - 1];
  }
  valueNow = A[curr];
  diff = max(0, valuePrev - valueNow + 1);
  if (curr + 1 < n && A[curr + 1] >= A[curr]) {
    next = true;
    diff = diff + A[curr + 1] - A[curr] + 1;
  }
  ret = min(ret, f(curr + 2, nBukit - 1, next) + diff);
  ret = min(ret, f(curr + 1, nBukit, false));
  return ret;
}
int main() {
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> A[i];
  }
  memset(DP, -1, sizeof(DP));
  for (int i = 1; i <= (n + 1) / 2; i++) {
    cout << f(0, i, true) << " ";
  }
  cout << endl;
  return 0;
}
