题解 | #神奇的口袋#
神奇的口袋
https://www.nowcoder.com/practice/9aaea0b82623466a8b29a9f1a00b5d35
#include <cstdio> #include <iostream> using namespace std; int arr[20]; int dp[40]; int main() { int n; scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d", &arr[i]); } for (int i = 0; i < 40; i++) { dp[i] = 0; } for (int i = 0; i < n; i++) { for (int j = 40; j >= arr[i]; j--) { // 动态转移方程 第j个坑位 保存的是 第j个坑位 + 第 [j - nums[i]] 个坑位的和 dp[j] = dp[j] + dp[j - arr[i]]; } dp[arr[i]]++; } printf("%d", dp[40]); } // 64 位输出请用 printf("%lld")