题目:
思路:
我能想到的只有暴力(超级麻烦)
但,竟然是背包问题!!!!!!
砝码的状态:放或不放
放的时候考虑放左边还是右边
dp[i][j] = dp[i - 1][j] || dp[i - 1][j + a[i]] || dp[i - 1][abs(j - a[i])];
代码:
#include <iostream>
#include <algorithm>
using namespace std;
int n,num,ans;
int a[110];
int dp[110][100010];
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
num += a[i];
}
dp[0][0] = 1;
for (int i = 1; i <= n; i++) {
for (int j = 0; j <= num; j++) {
dp[i][j] = dp[i - 1][j] || dp[i - 1][j + a[i]] || dp[i - 1][abs(j - a[i])];
if (dp[n][j])
ans++;
}
}
cout << ans-1;
return 0;
}