i430 区间dp

图片.png
//my
class Solution {
public:
    bool isScramble(string &s1, string &s2) {
        int m = s1.size(), n = s2.size();
        if (m != n)
            return false;
        vector<vector<vector<bool>>> dp(m, vector<vector<bool>>(m, vector<bool>(m + 1, false)));
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < m; j++) {
                dp[i][j][1] = (s1[i] == s2[j]);
            }
        }

        for (int k = 2; k <= m; k++) {
            for (int i = 0; i <= m - k; i++) {
                for (int j = 0; j <= m - k; j++) {
                    for (int w = 1; w < k; w++) {
                        if (dp[i][j][w] && dp[i + w][j + w][k - w]) {
                            dp[i][j][k] = true;
                            break;
                        }
                        if (dp[i][j + k - w][w] && dp[i + w][j][k - w]) {
                            dp[i][j][k] = true;
                            break;
                        }
                    }
                }
            }
        }
        return dp[0][0][m];
    }
};
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一.经典例题 题目地址: 【P1880】[NOI1995]石子合并 - 洛谷 二.分析 转移方程 dp_max[i...
    旧人旧事旧时光_4d20阅读 1,344评论 0 1
  • 简介 区间dp,顾名思义就是在一段区间上进行动态规划。对于每段区间,他们的最优值都是由几段更小区间的最优值得到,是...
    Steven1997阅读 6,571评论 0 2
  • 区间DP,对于每段小区间,它的最优值是由更小的区间的最优值得出的,由此往下划分,直到单个元素,由他们的组合合并得出...
    Cyril1317阅读 351评论 0 0
  • 区间类DP的做法,是用memorized search,把大区间拆分为小区间来解。而dp[i][j] 则直观的表示...
    stepsma阅读 650评论 0 1
  • 到酒店不到1个小时,从下火车到现在,心里的苦涩,让我不知道应该如何去排解。 今天在候车的时候,接到DAmon打来的...
    生为了活下去阅读 156评论 0 0