求助 调到自闭
查看原帖
求助 调到自闭
224978
optimize_2楼主2020/11/5 11:28
#include<bits/stdc++.h>
using namespace std;

int n,a[5010];
int lw[5010][5010];
int id[5010][5010];

int dfs(int l,int r,int h) {
    if(l>r) return 0;
    if(l==r) {
        if(h==a[l]) return 0;
        else return 1;
    }
    int res1=r-l+1;
    int res2=lw[l][r]-h;
    res2+=dfs(l,id[l][r]-1,h)+dfs(id[l][r]+1,r,h);
    return min(res1,res2);
}

int main() {
	cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    for(int i=1;i<n;i++) {
        lw[i][i]=a[i];
        id[i][i]=i;
        for(int j=i+1;j<=n;j++) {
            if(lw[i][j-1]>a[j]) {
                lw[i][j]=a[j];
                id[i][j]=j;
            } else {
                lw[i][j]=lw[i][j-1];
                id[i][j]=id[i][j-1];
            }
        }
    }
    cout<<dfs(1,n,0);
}
2020/11/5 11:28
加载中...