Advertisement
Guest User

Untitled

a guest
May 19th, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.94 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. const int N=1002;
  5. const int INF=1e9;
  6. int a[N];
  7. int n;
  8. //int memo[N][N];
  9. int dp[N][N];
  10.  
  11. /*int dp(int i,int prev){
  12. if(i>n) return 0;
  13. if(memo[i][prev]) return memo[i][prev];
  14. if(a[prev]+i-prev>3000) return INF;
  15. if(a[i]>=a[prev]+i-prev)
  16. memo[i][prev]=min(1+dp(i+1,prev),dp(i+1,i));
  17. else
  18. memo[i][prev]=1+dp(i+1,prev);
  19. return memo[i][prev];
  20. }*/
  21.  
  22. int main()
  23. {
  24. scanf("%d",&n);
  25. for(int i=1;i<=n;++i)
  26. scanf("%d",&a[i]);
  27. for(int i=n+1;i>0;--i){
  28. for(int prev=n;prev>=0;--prev){
  29. if(i>n) dp[i][prev]=0;
  30. else if(a[prev]+i-prev>3000) dp[i][prev]=INF;
  31. else{
  32. if(a[i]>=a[prev]+i-prev)
  33. dp[i][prev]=min(1+dp[i+1][prev],dp[i+1][i]);
  34. else
  35. dp[i][prev]=1+dp[i+1][prev];
  36. }
  37. }
  38. }
  39. printf("%d",dp[1][0]);
  40. //printf("%d",dp(1,0));
  41. return 0;
  42. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement