UOJ Logo flashlizard的博客

博客

标签
暂无

求助 推图 那题

2019-09-26 04:17:07 By flashlizard

为什么后面三个点会WA而不是TLE

谁能解答我的问题谁就是我爸爸!!!

#include<bits/stdc++.h>
using namespace std;
int n,t[100005],s[1000][1000],f[1000][1000],minn=0x7fffffff;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){cin>>t[i];f[i][i]=t[i];}
    for(int l=2;l<=n+1;l++){
        for(int i=0,j=i+l-1;j<=n;i++,j++){
            f[i][j]=0x7fffffff;
            int maxn=0,maxid=0;
            //cout<<"!"<<i<<" "<<j<<endl;
            int l=i,r=j,mid;
            while(l<r){
                mid=(l+r)>>1;//相当于g
                if(f[i][mid-1]<=f[mid+1][j])l=mid+1;
                else r=mid;
            }
            //cout<<l<<" "<<r<<" "<<endl;
            for(int k=i+1;k<l;k++)f[i][j]=min(f[i][j],f[k+1][j]+t[k]);
            for(int k=l+1;k<j;k++)f[i][j]=min(f[i][j],f[i][k-1]+t[k]);
            f[i][j]=min(f[i][j],max(f[i][l-1],f[l+1][j])+t[l]);
        }
    }
    cout<<f[0][n]<<endl;
}
/*
考虑区间DP
设f[i][j]表示假设x在l~r之间的最小代价
于是我们有f[i][j]=min(f[i][j],max(f[i][k],f[k+1][j])+t[k])
*/
共 1 篇博客