题目大意是给定N个有序数字,delete一个数字a[x],产生能量a[x - 1] * a[x + 1],问说产生的最大能量是多少,第一个和最后一个不能delete。
反过来考虑,insert操作,动态规划。
#include <iostream>
#include <vector>
using namespace std;
int dp[55][55];
class CasketOfStar
{
public:
int go(vector<int> w, int L, int R)
{
if(dp[L][R]) return dp[L][R];
for(int i = L + 1; i < R; i++)
{
int t = go(w, L, i) + go(w, i, R) + w[L] * w[R];
if(t > dp[L][R]) dp[L][R] = t;
}
return dp[L][R];
}
int maxEnergy(vector <int> w)
{
memset(dp, 0, sizeof(dp));
return go(w, 0, w.size() - 1);
}
};