首页 > 试题广场 >

数位染色

[编程题]数位染色
  • 热度指数:3994 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
小红拿到了一个正整数 。她可以将其中一些数位染成红色。然后她想让所有染红的数位数字之和等于没染色的数位数字之和。
她不知道能不能达成目标。你能告诉她吗?

输入描述:
一个正整数 



输出描述:
如果小红能按要求完成染色,输出"Yes"。否则输出"No"。
示例1

输入

1234567

输出

Yes

说明

将3、4、7染成红色即可,这样3+4+7=1+2+5+6
示例2

输入

23

输出

No

说明

显然无论如何都不能完成染色。
补充JAVA版本
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        long num = in.nextLong();
        String[] numStrs = Long.toString(num).split("");
        int[] nums = new int[numStrs.length];
        int sum = 0;
        for (int i = 0; i < numStrs.length; i++) {
            nums[i] = Integer.parseInt(numStrs[i]);
            sum += nums[i];
        }
        if (sum % 2 == 1) {
            System.out.println("No");
        } else {
            int target = sum / 2;
            int[] dp = new int[target + 1];
            dp[0] = 1;
            for (int n : nums) {
                int j = target ;
                while (j >= n) {
                    dp[j] += dp[j - n];
                    j--;
                }
            }
            if (dp[target] != 0) {
                System.out.println("Yes");
            } else {
                System.out.println("No");
            }
        }
    }
}


发表于 2022-03-28 22:16:04 回复(0)

问题信息

难度:
1条回答 1275浏览

热门推荐

通过挑战的用户

查看代码
数位染色