区间dp
class Solution {
public:
bool stoneGame(vector<int>& piles) {
int N = piles.size();
// dp[L][R] 表示[L][R] 区间先手最大和后手最大
int dpA[N+1][N+1];
int dpB[N+1][N+1];
memset(dpA,0,sizeof(dpA));
memset(dpB,0,sizeof(dpB));
for(int l = N-1;l >=0; l--){
dpA[l][l] = piles[l];
for(int r=l+1;r<N;r++){
dpA[l][r] = max(dpB[l+1][r] + piles[l],dpB[l][r-1] + piles[r]);
dpB[l][r] = min(dpA[l+1][r],dpA[l][r-1]);
}
}
return dpA[0][N-1] > dpB[0][N-1];
}
};
本文深入探讨了区间动态规划(DP)算法,通过具体实例讲解如何使用DP解决区间问题,包括初始化状态、状态转移方程及优化技巧。文章适用于对算法有一定了解的读者,旨在帮助理解并掌握区间DP的应用。
381

被折叠的 条评论
为什么被折叠?



