Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int N=1002;
- const int INF=1e9;
- int a[N];
- int n;
- //int memo[N][N];
- int dp[N][N];
- /*int dp(int i,int prev){
- if(i>n) return 0;
- if(memo[i][prev]) return memo[i][prev];
- if(a[prev]+i-prev>3000) return INF;
- if(a[i]>=a[prev]+i-prev)
- memo[i][prev]=min(1+dp(i+1,prev),dp(i+1,i));
- else
- memo[i][prev]=1+dp(i+1,prev);
- return memo[i][prev];
- }*/
- int main()
- {
- scanf("%d",&n);
- for(int i=1;i<=n;++i)
- scanf("%d",&a[i]);
- for(int i=n+1;i>0;--i){
- for(int prev=n;prev>=0;--prev){
- if(i>n) dp[i][prev]=0;
- else if(a[prev]+i-prev>3000) dp[i][prev]=INF;
- else{
- if(a[i]>=a[prev]+i-prev)
- dp[i][prev]=min(1+dp[i+1][prev],dp[i+1][i]);
- else
- dp[i][prev]=1+dp[i+1][prev];
- }
- }
- }
- printf("%d",dp[1][0]);
- //printf("%d",dp(1,0));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement