Description
TL;DR 消消乐
给出一个数组
Constraints
Solution
关键在于定义
定义好就可以递推了
Code
class Solution {
public:
int removeBoxes(vector<int>& boxes) {
int dp[101][101][101];
memset(dp, 0, sizeof dp);
auto dfs = [&](auto &&dfs, int l, int r, int x) {
if(l == r) return (x+1) * (x+1);
if(l > r) return 0;
if(dp[l][r][x]) return dp[l][r][x];
// [l, r-1], [r, x...)
int ans = dfs(dfs, l, r-1, 0) + dfs(dfs, r, r, x);
for(int i = l; i < r; ++i) {
// [l, i], [i+1, r-1], [r, x...)
if(boxes[i] == boxes[r]) {
ans = max(ans, dfs(dfs, i+1, r-1, 0) + dfs(dfs, l, i, x+1));
} else {
ans = max(ans, dfs(dfs, l, i, 0) + dfs(dfs, i+1, r-1, 0) + dfs(dfs, r, r, x));
}
}
return dp[l][r][x] = ans;
};
return dfs(dfs, 0, boxes.size()-1, 0);
}
};