状态压缩动态规划 dp 使用总结
状态压缩
状态压缩就是用进制数(可以是二进制,三进制等等)表示状态,然后进行动态规划 dp。
应用示例
两个数组最大值
对于 students
和 mentors
两个二维数组,两两匹配,计算最大值。
public int maxCompatibilitySum(int[][] students, int[][] mentors) {
int n = students.length, range = 1 << n;
int[] dp = new int[range];
Arrays.fill(dp, Integer.MIN_VALUE);
dp[0] = 0;
for (int i = 0; i < range; i++) {
for (int j = 0; j < n; j++) {
if (((i >> j) & 1) == 1)//i的第j位为1
dp[i] = Math.max(dp[i], dp[i ^ (1 << j)] + getVal(students[Integer.bitCount(i) - 1],mentors[j]));
}
}
return dp[range - 1];
}
相关文章