题目:https://www.nowcoder.com/practice/9aaea0b82623466a8b29a9f1a00b5d35?tpId=40&tqId=21390&tPage=1&rp=1&ru=/ta/kaoyan&qru=/ta/kaoyan/question-ranking
代码
#include <cstdio>#include <iostream>using namespace std;const int obj_num = 25;const int max_val = 9999999;int dp[obj_num][max_val]; // dp的含义是背包容量为i的时候,有几种选择方法凑出jint a[25];int main(){ int n; while(scanf("%d", &n) != EOF){ for(int i = 1; i <= n; i++) { scanf("%d", &a[i]); dp[i][0] = 1; } dp[0][0] = 1; for(int i = 1; i <= n; i++){ for(int j = 1; j <= 40; j++){ dp[i][j] = dp[i - 1][j]; if(j >= a[i]) dp[i][j] += dp[i - 1][j - a[i]]; } } printf("%d\n", dp[n][40]); }}