问题标题: 已自行AC

0
1
已解决
包涵宇
包涵宇
中级天翼
中级天翼

看一下今天的问题:

 

1185   能量最大化(energy)

WA70!!!

#include<bits/stdc++.h>
using namespace std;
int n,a[205],b[205],f[205][205],s[205],ans;
int main(){ 
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		a[n+i]=a[i];
	}
	for(int l=1;l<n;l++){
		for(int i=1;i<2*n;i++){
			int j=i+l;
			if(j>2*n)break;
			for(int t=i;t<j;t++)
				f[i][j]=max(f[i][j],f[i][t]+f[t+1][j]+a[i]*a[j+1]*a[t+1]);
		}
	}
	for(int i=1;i<=n;i++)
		ans=max(ans,f[i][n+i-1]);
	cout<<ans;
    return 0; 
} 

求大神速答!

包涵宇在2020-08-21 11:24:20追加了内容

很简单的一处错误,在第3行(我已自行AC),我会采纳回答正确的

包涵宇在2020-08-21 11:30:13追加了内容

我还是结贴吧,为了公平,我采纳最早回答的侯**(我的30豆...)


0
0
王子健
王子健
初级天翼
初级天翼

可以推导动态转移方程

 f[i][j]=max(f[i][j],f[i][k]+f[(k+1)%n][j]+a[i]*a[(k+1)%n]*a[(j+1)%n]);

最后因为f[i][j]表示第i颗珠子到第j颗珠子合并成一颗珠子释放的最大能量值

所以最后要f[i,j]=max(f[i,k]+f[k+1,j]+a[i]*a[k+1]*a[j+1]);

(以上摘自赵逸凡大佬回答)

 

这里有答案

0
0
0
我要回答