public class 集换卡牌 {
/**
* 状态dp
* 测试案例:
* 000 111 222 345 678 891
*
* @param args
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] split = sc.nextLine().split(" ");
int len = split.length;
int value[] = new int[len];
for (int i = 0; i < len; i++) {
for (int j = 0; j < 3; j++) {
value[i] = (value[i] | (1 << (split[i].charAt(j) - '0')));
}
}
int dp[] = new int[1 << 10];
for (int i = 1; i < dp.length; i++) {
dp[i] = 500 + 1;
}
dp[0] = 0;
for (int i = 0; i < len; i++) {
for (int j = (1 << 10) - 1; j >= 0; j--) { //状态j 可以由状态 j-(value[i] & j) 转换过来。
if ((j & value[i]) != 0)
dp[j] = Math.min(dp[j - (value[i] & j)] + 1, dp[j]);
}
}
System.out.println(dp[(1 << 10) - 1]);
}
}
4-10字节机试 集换卡牌
于 2022-04-10 15:28:22 首次发布