E30 区间DP P1063 [NOIP 2006 提高组] 能量项链
P1063 [NOIP 2006 提高组] 能量项链 - 洛谷
// 区间DP O(n^3) #include <bits/stdc++.h> using namespace std; const int N=210; int n, a[N]; //a[i]为第i颗珠子的头标记 int f[N][N]; //f[i,j]表示合并[i,j]得到的能量最大值 int main(){ cin>>n; for(int i=1; i<=n; i++)cin>>a[i], a[i+n]=a[i]; for(int len=3; len<=n+1; len++) for(int i=1,j=i+len-1; j<=2*n; i++,j++) for(int k=i+1 ;k<j; k++) f[i][j]=max(f[i][j],f[i][k]+f[k][j]+a[i]*a[k]*a[j]); int ans=0; for(int i=1;i<=n;i++) ans=max(ans,f[i][i+n]); //f[1,n+1]...f[n,2n] cout<<ans; }
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号