#yyds干货盘点# 动态规划专题:数位染色
发布时间:2022-12-07 08:06:02 231 相关标签:
1.简述:
描述
小红拿到了一个正整数 。她可以将其中一些数位染成红色。然后她想让所有染红的数位数字之和等于没染色的数位数字之和。她不知道能不能达成目标。你能告诉她吗?
输入描述:
一个正整数
输出描述:
如果小红能按要求完成染色,输出"Yes"。否则输出"No"。
示例1
输入:
输出:
说明:
将3、4、7染成红色即可,这样3+4+7=1+2+5+6
示例2
输入:
输出:
说明:
2.代码实现:
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNext()) { // 注意 while 处理多个 case
String str = in.next();
String res = process(str) ? "Yes" : "No";
System.out.println(res);
}
}
public static boolean process(String str) {
if (str == null || str.length() < 1) {
return false;
}
char[] arr = str.toCharArray();
int sum = 0;
int n = arr.length;
int[] nums = new int[n];
for (int i = 0; i < n; i++) {
sum += (arr[i] - '0');
nums[i] = arr[i] - '0';
}
int half = sum / 2;
if (sum % 2 != 0) {
return false;
}
boolean[] dp = new boolean[half + 1];
dp[0] = true;
dp[nums[0]] = true;
for (int i = 1; i < n; i++) {
for (int j = half; j >= nums[i]; j--) {
dp[j] = dp[j] || dp[j - nums[i]];
}
if (dp[half]) {
return true;
}
}
return false;
}
}
文章来源: https://blog.51cto.com/u_15488507/5900202
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报