#include <iostream> #include <cstring> #include <cmath> using namespace std; using ll=long long ; const int maxn=1e3+10; int dp[maxn][maxn]; int sum[maxn][maxn]; int a[maxn]; int main() { ios::sync_with_stdio(false); int n; cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; sum[i][i]=a[i]; } for(int len=1;len<=n;len++){ for(int j=1;j+len<=n+1;j++){ int ends=j+len-1; for(int i=j;i<ends;i++){ dp[j][ends]=max(dp[j][ends],dp[j][i]+dp[i+1][ends]+(int)pow(abs(sum[j][i]-sum[i+1][ends]),2)); sum[j][ends]=sum[j][i]*sum[i+1][ends]; } } } cout<<dp[1][n]; }
服了经典赛后过题!