力扣练习-动态规划

线性DP

3122. 使矩阵满足条件的最少操作次数

class Solution {
    /*
       问题分类:线性DP问题
       1.每一列元素值相同,相邻列元素值不同,考虑按照列进行状态枚举枚举
       2.0 <= grid[i][j] <= 9,值的范围很小只有10个
       3. f[i][j]可以为考虑前i列并且第i列元素为j的最少操作数目
        
    */
    public int minimumOperations(int[][] grid) {
        int row = grid.length,col = grid[0].length;

        int[][] cnt = new int[col][10];
        for(int r = 0;r < row;r++){
            for(int c = 0;c < col;c++){
                cnt[c][grid[r][c]]++;
            }
        }

        int[][] f = new int[col][10];
        for(int c = 0;c < col;c++){
            Arrays.fill(f[c],Integer.MAX_VALUE);
        }
        for(int v = 0;v < 10;v++){
            f[0][v] = row - cnt[0][v];
        }

        for(int c = 1;c < col;c++){
            for(int v = 0;v < 10;v++){
                for(int pv = 0;pv < 10;pv++){
                    if(pv == v){
                        continue;
                    }
                    f[c][v] = Math.min(f[c-1][pv] + (row - cnt[c][v]),f[c][v]); 
                }
            }
        }

        int res = Integer.MAX_VALUE;
        for(int v = 0;v < 10;v++){
            res = Math.min(res,f[col-1][v]);
        }

        return res;
    }
}
posted @ 2024-04-27 17:34  狗星  阅读(1)  评论(0编辑  收藏  举报
/* 返回顶部代码 */ TOP