MLE * 3
查看原帖
MLE * 3
224978
optimize_2楼主2020/11/6 21:38

RT

有一篇题解就是这么写的

我交了一遍

也是MLE

求正解(或者这个方法可以优化?)

#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,lw[l][r])+dfs(id[l][r]+1,r,lw[l][r]);
    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];
            }
        }
    }
//    for(int i=1;i<=n;i++) {
//    	for(int j=1;j<=n;j++) {
//    		cout<<id[i][j]<<" ";
//		}
//		cout<<endl;
//	}
    cout<<dfs(1,n,0);
}
2020/11/6 21:38
加载中...