首页 > 其他 > 详细

dp专题

时间:2021-06-05 17:54:00      阅读:14      评论:0      收藏:0      [点我收藏+]

1.编辑距离

class Solution {
public:
    int minDistance(string word1string word2) {
        int m,n;
        m=word1.size();
        n=word2.size();
        vector<vector<int>> dp(m+1,vector<int>(n+1,0));
        for(int i=0;i<=n;i++){
            dp[0][i]=i;
        }
        for(int i=0;i<=m;i++){
            dp[i][0]=i;
        }
        for(int i=1;i<=m;++i){
            for(int j=1;j<=n;j++){
                int left=dp[i-1][j]+1;
                int right=dp[i][j-1]+1;
                int mid=dp[i-1][j-1];
                if(word1[i-1]!=word2[j-1])
                    mid+=1;
                dp[i][j]=min(left,min(right,mid));
            }
        }
        return dp[m][n];
    }
};
 
2.最大矩阵
方法一:动态规划
class Solution {
public:
    int maximalRectangle(vector<vector<char>>& matrix) {
        int m = matrix.size();
        if (m == 0) {
            return 0;
        }
        int n = matrix[0].size();
        vector<vector<int>> left(m, vector<int>(n, 0));

        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (matrix[i][j] == ‘1‘) {
                    left[i][j] = (j == 0 ? 0: left[i][j - 1]) + 1;
                }
            }
        }

        int ret = 0;
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (matrix[i][j] == ‘0‘) {
                    continue;
                }
                int width = left[i][j];
                int area = width;
                for (int k = i - 1; k >= 0; k--) {
                    width = min(width, left[k][j]);
                    area = max(area, (i - k + 1) * width);
                }
                ret = max(ret, area);
            }
        }
        return ret;
    }
};

dp专题

原文:https://www.cnblogs.com/big-zoo/p/14853313.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!