0
已解决
包涵宇
中级天翼
中级天翼
看一下今天的问题:
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