蓝桥杯-砝码称重

阅读 61

2022-03-18

示例运行过程

import java.util.Scanner;

class Main{
    public static void main(String args[]) {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int[] a = new int[n+1];
        int sum = 0;
        for (int i = 1; i <= n; i++) {
            a[i] = scan.nextInt();
            sum+=a[i];
        }
        int[][] dp = new int[n+1][sum*2+1];
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= sum; j++) {
                dp[i][j] = dp[i-1][j];
                if(dp[i][j] == 0){
                    if(j == a[i])
                        dp[i][j] = 1;
                    //判定的值与当前选择的砝码相等
                    if(dp[i-1][j+a[i]] == 1)
                        dp[i][j] = 1;
                    //检查当前i砝码与上一个状态(之前组合出的值)放在不同侧,是否可以组成j。
                    if(dp[i-1][Math.abs(j-a[i])] == 1)
                        dp[i][j] = 1;
                    //检查当前i砝码与上一个状态(之前组合出的值)放在同一侧,是否可以组成j。
                }
            }
        }
        int ans = 0;
        for (int i = 1; i <= sum; i++) {
            if(dp[n][i] == 1)
                ans++;
        }
        System.out.println(ans);
    }
}

精彩评论(0)

0 0 举报