题解 | #神奇的口袋#
神奇的口袋
https://www.nowcoder.com/practice/9aaea0b82623466a8b29a9f1a00b5d35
#include<iostream> using namespace std; #define vsum 40 int typenum(int v[], int n, int s);//表示从数组v[n]中选择某些物品使得体积和为s,共有多少情况。 int main(){ int n; scanf("%d",&n);//功能: 执行格式化输入;其调用格式为: scanf("<格式化字符串>",<地址表>); int v[n]; for(int i = 0; i < n; i++) scanf("%d", &v[i]); printf("%d", typenum(v, n, vsum));//功能: 执行格式化输出;其调用格式为: printf("<格式化字符串>",<数值>); return 0; } int typenum(int v[], int n, int s){//n为数组长度,s为体积和 if(s == 0) return 1;//当体积和为0时,表明不需要选择,这本身也是一种选择 if(n == 1){ if(v[0] != s) return 0; else return 1; } return (typenum(v, n-1, s) + typenum(v, n-1, s-v[n-1])); }