zoukankan      html  css  js  c++  java
  • 百练2755:神奇的口袋(简单dp)

    描述有一个神奇的口袋,总的容积是40,用这个口袋可以变出一些物品,这些物品的总体积必须是40。John现在有n个想要得到的物品,每个物品的体积分别是a1,a2……an。John可以从这些物品中选择一些,如果选出的物体的总体积是40,那么利用这个神奇的口袋,John就可以得到这些物品。现在的问题是,John有多少种不同的选择物品的方式。输入输入的第一行是正整数n (1 <= n <= 20),表示不同的物品的数目。接下来的n行,每行有一个1到40之间的正整数,分别给出a1,a2……an的值。输出输出不同的选择物品的方式的数目。样例输入

    3
    20
    20
    20
    

    样例输出

    3
     1 #include<iostream>
     2 #include<cstdlib>
     3 #include<cstring>
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     int n;
     9     int v[50];
    10     int dp[50][50];//dp[i][j]表示从前j个物品中凑出体积为i的做法有多少种
    11     cin >> n;
    12     for (int i = 1; i <= n; ++i)
    13     {
    14         cin >> v[i];
    15     }
    16     memset(dp, 0, sizeof(dp));
    17     //边界条件:有物品,凑出体积为0的做法为1(一个物品都不放)
    18     for (int i = 0; i <= n; ++i)
    19     {
    20         dp[0][i] = 1;
    21     }
    22     for(int i = 1;i<=40;++i)
    23         for (int j = 0; j <= n; ++j)
    24         {
    25             dp[i][j] = dp[i][j-1];//不放第j个物品的放法
    26             if (i >= v[j])
    27             {
    28                 dp[i][j] += dp[i - v[j]][j - 1];
    29             }
    30         }
    31     cout << dp[40][n] << endl;
    32     return 0;
    33 }
  • 相关阅读:
    最大熵模型中的数学推导
    最大似然估计总结
    减压放松的一些网站
    决策树
    【转】贝叶斯分类干货
    【转】数学之美番外篇:平凡而又神奇的贝叶斯方法
    信号量与并发控制
    枚举与字符串映射
    Block与参数
    Sublime Text 小计
  • 原文地址:https://www.cnblogs.com/knmxx/p/9523827.html
Copyright © 2011-2022 走看看