0
点赞
收藏
分享

微信扫一扫

砝码称重 蓝桥杯

妖妖妈 2022-04-13 阅读 68
java

【题目】

在这里插入图片描述

题目链接

dp题,好久没碰算法了,贼生疏。
状态转移方程: dp[i][j] = dp[i][j] + dp[i-1][j] + dp[i-1][j+w[i]]+dp[i-1][abs(dp[i][j-w[i]])]
然后遍历dp[n][i]看看然后计数即可。

【代码】

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
    	Scanner scan = new Scanner(System.in);
    	int n = scan.nextInt();
    	int[] w = new int[n+1];
    	int[][]dp = new int[105][100005];
    	int sum = 0;
    	for(int i=1;i<=n;i++) {
    		w[i] = scan.nextInt(); 
    		sum+=w[i];
    	}
    	for(int i=1;i<=n;i++) {
    		for(int j=0;j<=sum;j++) {
    			if(w[i]==j) dp[i][j] = 1;
    			dp[i][j] += dp[i-1][j]+dp[i-1][j+w[i]]+dp[i-1][Math.abs(j-w[i])];
    		}
    	}
    	int ans = 0;
    	for(int i=1;i<=sum;i++) {
    		if(dp[n][i]!=0) {
    			ans++;
    		}
    	}
    	System.out.println(ans);
    	scan.close();
    }
}
举报

相关推荐

0 条评论