一个问题
查看原帖
一个问题
400245
_Mikasa楼主2023/5/3 21:18

这是10分代码

#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,a[10000001],dp[5000][5000];
signed main(){
	scanf("%lld",&n);
	for(int i=1;i<=n;i++){
		scanf("%lld",&a[i]);
		a[i+n]=a[i];
	}
	for(int len=1;len<=n;len++){
		for(int i=1;i+len<=2*n;i++){
			int j=len+i;
			for(int k=i+1;k<j;k++){
				dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]+a[i]*a[k]*a[j]);
			}
		}
	}
	int ans=0; 
    for(int i=1;i<=n;i++){ 
        ans=max(dp[i][i+n],ans); 
    } 
    printf("%lld",ans); 
//    cout<<dp[n][];
	return 0;
}

把状态转移方程里的 dp[k+1][j] 改成 dp[k][j] 就A了 但是我不是很理解 求解答

2023/5/3 21:18
加载中...