Advertisement
yicongli

CF1012C

Jan 20th, 2021 (edited)
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.95 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define gc c=getchar()
  6. #define r(x) read(x)
  7. #define ll long long
  8.  
  9. template<typename T>
  10. inline void read(T&x){
  11.     x=0;T k=1;char gc;
  12.     while(!isdigit(c)){if(c=='-')k=-1;gc;}
  13.     while(isdigit(c)){x=x*10+c-'0';gc;}x*=k;
  14. }
  15.  
  16. const int N=5010;
  17. const int INF=5e8+7;
  18.  
  19. int a[N];
  20. int f[N][N>>1][2];
  21.  
  22. int main(){
  23.     // freopen(".in","r",stdin);
  24.     // freopen(".out","w",stdout);
  25.     int n;r(n);
  26.     for(int i=1;i<=n;++i){
  27.         r(a[i]);
  28.     }
  29.     f[1][0][0]=0;
  30.     f[1][1][1]=0;
  31.     f[1][1][0]=INF;
  32.     f[1][0][1]=INF;
  33.     for(int i=2;i<=n;++i){
  34.         for(int j=1;j<=n+1>>1;++j){
  35.             f[i][j][0]=INF;
  36.             f[i][j][1]=INF;
  37.         }
  38.         for(int j=1;j<=i+1>>1;++j){
  39.             f[i][j][0]=min(f[i-1][j][0],f[i-1][j][1]+max(a[i]-a[i-1]+1,0));
  40.             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));
  41.         }
  42.     }
  43.     for(int i=1;i<=n+1>>1;++i){
  44.         printf("%d ",min(f[n][i][0],f[n][i][1]));
  45.     }
  46.     return 0;
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement