A了,但是求助!!
查看原帖
A了,但是求助!!
366639
hh弟中弟楼主2023/7/29 09:24

此题在校内oj上有一道,不过没有spj, 这份代码是能在洛谷上a,但是oj上没有

// 23/7/28/21:13
#include<bits/stdc++.h>
using namespace std;
long long a[45],dp[55][55],path[55][55],n;
void putt(int x,int l,int r){
    if(x){
        cout<<x<<' ';
        putt(path[l][x-1],l,x-1);
        putt(path[x+1][r],x+1,r);
    }
    
    return;
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];dp[i][i]=a[i];
        dp[i-1][i]=a[i-1]+dp[i][i];
        path[i][i]=i;path[i][i+1]=i;
    }dp[0][1]=0;//cin>>a[i];
    for(int i=n-2;i>=1;i--){
        for(int j=i+2;j<=n;j++){
            for(int k=i+1;k<j;k++){
                if(dp[i][j]<dp[i][k-1]*dp[k+1][j]+dp[k][k]){
                    dp[i][j]=dp[i][k-1]*dp[k+1][j]+dp[k][k];
                    path[i][j]=k;
                   // node[k].l=k-1;node[k].r=k+1;node[k-1].in++;node[k+1].in++;
                }
                //cout<<dp[i][j]<<' ';
            }//cout<<endl;
        }
    }
    cout<<dp[1][n]<<endl;
    putt(path[1][n],1,n);
    return 0;
}

路径是wa的,并且有一组数据的最大值也是wa的 如图 上面这份没有考虑边界,因为我认为边界取不到最大,另外长度也是从3开始的,因为2长度不需要讨论,所以提前存了。 下面这一份是都能a的代码,讨论了边界和2长度,但是我感觉这不会产生影响

// 23/7/28/21:13
#include<bits/stdc++.h>
using namespace std;
long long a[45],dp[55][55],path[55][55],n;
void putt(int l,int r){
    if(l<=r){
        cout<<path[l][r]<<' ';
        putt(l,path[l][r]-1);
        putt(path[l][r]+1,r);
    }
    return;
}
int main(){
    cin>>n;dp[n+1][n]=1;
    for(int i=1;i<=n;i++){
        cin>>a[i];dp[i][i]=a[i];
        dp[i][i-1]=1;
        path[i][i]=i;//path[i][i+1]=i+1;
    }//path[n][n+1]=0;//cin>>a[i];
    for(int i=n-1;i>=1;i--){
        for(int j=i+1;j<=n;j++){
            for(int k=i;k<=j;k++){
                if(dp[i][j]<dp[i][k-1]*dp[k+1][j]+dp[k][k]){
                    dp[i][j]=dp[i][k-1]*dp[k+1][j]+dp[k][k];
                    path[i][j]=k;
                   // node[k].l=k-1;node[k].r=k+1;node[k-1].in++;node[k+1].in++;
                }
                //cout<<dp[i][j]<<' ';
            }//cout<<endl;
        }
    }
    cout<<dp[1][n]<<endl;
    putt(1,n);
    return 0;
}

想一早上了,求解

2023/7/29 09:24
加载中...