代码手记笔录——动态规划数组遍历顺序

1、0-1 背包的遍历顺序问题

2、完全背包的遍历顺序问题

3、回文字符串的遍历顺序问题

首先回文字符串 dp 初始化矩阵为下三角矩阵,且元素只为 1:

for (int i=0; i<n; ++i) {
  for (int j=i; j<n; ++j)
    dp[i][j] = 1;
}

然后明确字符串 s[i:j] 是回文串的条件=>s[i]==s[j] && dpSys[i+1][j-1],即长元素 s[i:j] 的判定条件依赖于内部短元素 s[i+1:j-1]。因此遍历顺序应该从短字符串开始:

for (int i=0; i<n; ++i) {
    for (int j=0; j<=i; ++j)
        dpSyms[i][j] = 1;
}
for (int i=n-1; i>=0; --i) {
    for (int j=i+1; j<n; ++j)
        dpSyms[i][j] = (s[i] == s[j]) && dpSyms[i+1][j-1];
}
posted @ 2022-05-13 16:13  MasterBean  阅读(106)  评论(0)    收藏  举报