線性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;
}
}