Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define gc c=getchar()
- #define r(x) read(x)
- #define ll long long
- template<typename T>
- inline void read(T&x){
- x=0;T k=1;char gc;
- while(!isdigit(c)){if(c=='-')k=-1;gc;}
- while(isdigit(c)){x=x*10+c-'0';gc;}x*=k;
- }
- const int N=5010;
- const int INF=5e8+7;
- int a[N];
- int f[N][N>>1][2];
- int main(){
- // freopen(".in","r",stdin);
- // freopen(".out","w",stdout);
- int n;r(n);
- for(int i=1;i<=n;++i){
- r(a[i]);
- }
- f[1][0][0]=0;
- f[1][1][1]=0;
- f[1][1][0]=INF;
- f[1][0][1]=INF;
- for(int i=2;i<=n;++i){
- for(int j=1;j<=n+1>>1;++j){
- f[i][j][0]=INF;
- f[i][j][1]=INF;
- }
- for(int j=1;j<=i+1>>1;++j){
- f[i][j][0]=min(f[i-1][j][0],f[i-1][j][1]+max(a[i]-a[i-1]+1,0));
- f[i][j][1]=min(f[i-2][j-1][0]+max(a[i-1]-a[i]+1,0),f[i-2][j-1][1]+max(max(a[i-1]-a[i]+1,a[i-1]-a[i-2]+1),0));
- }
- }
- for(int i=1;i<=n+1>>1;++i){
- printf("%d ",min(f[n][i][0],f[n][i][1]));
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement