Remove Boxes由于对该题的理解不深,于是找了另外一道简单一点的题目来理解。
int dp[500][500] = {0}; //dp[i][j]:i-j全部消掉能得到的最大数字
int main(){
int num[4] = {3,1,5,8};
vector<int> nums(num, num+4); //数据预处理,左右两边的气球默认为1
nums.insert(nums.begin(), 1); nums.push_back(1);
int n = (int)nums.size();
for(int l = 1; l <=n-2; l++){ //消除区间中的元素个数:从1开始到n-2
for(int i = 1; i <= n-1-l; i++){ //移动区间的开始位置(1 ~ n-1)去除前后的1
int end = i + l -1;
for(int j = i; j<=end; j++){
int a1 = dp[i][end];
int a2 = dp[i][j-1] + dp[j+1][end] + nums[j] * nums[i-1] * nums[end+1];
dp[i][end] = max(a1, a2);
}
}
}
cout<<dp[1][n-2];
return 0;
}