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

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

 

输入

输入的第一行是正整数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;
} 

相关文章
|
11月前
【动态规划刷题 1 】 第N个泰波那契数&& 三步问题
【动态规划刷题 1 】 第N个泰波那契数&& 三步问题
|
1月前
|
算法 搜索推荐 Java
解析01背包问题及其在动态规划中的应用
解析01背包问题及其在动态规划中的应用
|
3月前
|
算法
算法系列--动态规划--背包问题(2)--01背包拓展题目(下)
算法系列--动态规划--背包问题(2)--01背包拓展题目(下)
31 0
算法系列--动态规划--背包问题(2)--01背包拓展题目(下)
|
3月前
|
算法
算法系列--动态规划--背包问题(2)--01背包拓展题目(上)
算法系列--动态规划--背包问题(2)--01背包拓展题目
32 0
|
3月前
|
算法
[leedcode]刷题有感--动态规划经典问题--01背包问题
[leedcode]刷题有感--动态规划经典问题--01背包问题
|
3月前
|
算法
动态规划之第 N 个泰波那契数/三步问题【leetCode】【算法】
动态规划之第 N 个泰波那契数/三步问题【leetCode】【算法】
|
8月前
动态规划入门01背包
基本思路: 1.n物品个数,m为背包体积,使用w[i]记录权值,v[i]记录体积,f[i][j]记录选择前i个物体,在不超过j体积下的最优解 最终答案就是f[n][m]; 2.f[i][j]的状态依赖于之前的状态;即f[i[][j]依赖于f[i - 1][j]的状态;也可以理解为所有的状态由f[0][j]推得 f[i][j]的状态不好算出来,但是f[0][j]的状态必定为0,由f[0][j]可以算出f[1][j]的,由f[1][j]又可算出f[2][j]的递推可得出全部。f[1][1] f[2][2] f[3][3]他们每个都减去第i个物品的权值最大值仍不变,最后在加上w[i]即可 即( f[
41 0
|
算法
动态规划(以背包问题为例)
动态规划(以背包问题为例)
92 0
|
算法 C++
LeetCode455分发饼干c++贪心解法
目录 题目 思考: 算法思路: 代码 题目 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。
146 0
LeetCode455分发饼干c++贪心解法