首页 > 代码库 > 能量项链
能量项链
抄了抄代码,看了看区间dp
把这个项链切开,复制一次,枚举右端点,枚举区间长度,确定左端点,区间中选中一个分割点
f[i][j]=max(f[i][j],f[i][k]+f[k+1][j]+a[i]*a[k+1]*a[j+1])
#include<iostream> #include<cstdio> using namespace std; int n,ans; int a[210]; int f[210][210]; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",a+i);a[i+n]=a[i]; } for(int j=2;j<=2*n-1;j++) for(int i=j-1;i>0&&j-i<n;i--) for(int k=i;k<j;k++) f[i][j]=max(f[i][j],f[i][k]+f[k+1][j]+a[i]*a[k+1]*a[j+1]); for(int i=1;i<=n+1;i++) ans=max(ans,f[i][i+n-1]); cout<<ans<<endl; return 0; }
能量项链
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。