神奇的背包-递归+动态规划-百练

来源:互联网 发布:mac打开刚关闭的网页 编辑:程序博客网 时间:2024/05/14 06:31
输入
输入的第一行是正整数n (1 <= n <= 20),表示不同的物品的
数目。接下来的n行,每行有一个1到40之间的正整数,分别
给出a 1 ,a 2 ……a n 的值。
输出
输出不同的选择物品的方式的数目。
输入样例
3
20
20
20
 输出样例
3
62
枚举每个物品是选还是不选,共2 20 种情况

枚举的解法

#include<stdio.h>int a[100];int n;int total[100]={0};int f(int m,int k){if(m==0){return 1;}if(k>=n){return 0;}return  total[k]=f(m,k+1)+f(m-a[k],k+1);}int main(){scanf("%d",&n);for(int i=0;i<n;i++){  scanf("%d",&a[i]);}printf("%d",f(40,0));for(int i=0;i<n;i++){printf("%d",total[i]);}return 0;} 


0 0