【题目】
题目链接
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();
}
}