Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- int const N = 1010;
- int arr[N];
- int n;
- int min(int a,int b){
- return (a < b ? a : b);
- }
- int dp[N][3010];
- int cal(int i ,int b){
- if(b>3000)return 1e9;
- if(i > n){
- return 0;
- }
- if(dp[i][b] != -1)return dp[i][b];
- if(arr[i] <= b){
- return dp[i][b] = cal(i+1,b+1) + 1;
- }
- return dp[i][b] = min(cal(i+1,arr[i]) , cal(i+1,b+1) + 1);
- }
- int main()
- {
- for(int i = 0 ; i < N ; i ++)for(int j = 0 ; j < 3010 ; j ++)dp[i][j] = -1;
- scanf("%d",&n);
- for(int i = 1 ; i <= n ; i ++){
- scanf("%d",&arr[i]);
- }
- printf("%d",cal(1,0));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement