2 条题解

  • 0
    @ 2023-9-9 12:41:57
    #include <iostream>
    using namespace std;
    const int N=1e3+10;
    struct node{
    	int bg;
    	int ed;
    }a[N];
    int b[N],dp[N][N];
    int main(){
    	int n;cin>>n; 
    	for(int i=1;i<=n;i++){
    		cin>>b[i];
    		b[i+n]=b[i];
    	}
    	for(int i=1;i<2*n;i++){
    		a[i].bg=b[i],a[i].ed=b[i+1];
    	}
    	a[2*n].bg=b[2*n],a[2*n].ed=b[1];
    	for(int i=2*n-1;i>=1;i--){
    		for(int j=i+1;j<=2*n&&j-i+1<=n;j++){
    			for(int k=i;k<j;k++){
    				dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]+a[i].bg*a[k].ed*a[j].ed);
    			}
    		}
    	}
    	int mx=0;
    	for(int i=1;i<=n;i++){
    		mx=max(mx,dp[i][i+n-1]);
    	}
    	cout<<mx<<endl;
    	return 0;
    } 
    

    信息

    ID
    230
    时间
    1000ms
    内存
    256MiB
    难度
    4
    标签
    递交数
    116
    已通过
    54
    上传者