|
@@ -0,0 +1,25 @@
|
|
|
+#include <cstdio>
|
|
|
+#include <cstring>
|
|
|
+
|
|
|
+using namespace std;
|
|
|
+
|
|
|
+const int N = 20, V = 40;
|
|
|
+
|
|
|
+int n, a[N], dp[N + 1][V + 1];
|
|
|
+
|
|
|
+int main() {
|
|
|
+ scanf("%d", &n);
|
|
|
+ for (int i = 0; i < n; i++) scanf("%d", &a[i]);
|
|
|
+ memset(dp, 0, sizeof(dp));
|
|
|
+ // dp[i][j] = dp[i - 1][j - a[i]] + dp[i - 1][j]
|
|
|
+ dp[0][0] = 1;
|
|
|
+ for (int i = 1; i <= n; i++) {
|
|
|
+ dp[i][0] = 1;
|
|
|
+ for (int j = 1; j <= V; j++) {
|
|
|
+ if (a[i - 1] <= j) dp[i][j] = dp[i - 1][j - a[i - 1]] + dp[i - 1][j];
|
|
|
+ else dp[i][j] = dp[i - 1][j];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ printf("%d\n", dp[n][V]);
|
|
|
+ return 0;
|
|
|
+}
|