zoukankan      html  css  js  c++  java
  • 买书(dp)

    小明手里有n元钱全部用来买书,书的价格为10元,20元,50元,100元。

    问小明有多少种买书方案?(每种书可购买多本)

    输入格式
    一个整数 n,代表总共钱数。

    输出格式
    一个整数,代表选择方案种数。

    数据范围
    0≤n≤1000
    输入样例1:
    20
    输出样例1:
    2
    输入样例2:
    15
    输出样例2:
    0
    输入样例3:
    0
    输出样例3:
    1

    思路:
    这里就是一个完全背包问题 每一本书可以一直买 然后我有N元 ,这里唯一多了一个条件就是一直买 相比于0 1 背包而且要恰好等于我总共的钱; 一样先枚举每一本书 然后从小到大去枚举我的钱的数目,
    假设我们有20元,需要得到买加上不买这本书得到的方案数 这里与 01背包不相同 01背包每一个物品只能去一次 这里可以无限取 ,如何保证能每一次把钱恰好用完 在遍历的时候能得到的一定是倍数

    #include <iostream>
    #include <cstring>
    using namespace std;
    int n ;
    const int N = 1010;
    int dp[N];
    int main()
    {
        /*
        小明手里有n元钱全部用来买书,书的价格为10元,20元,50元,100元。
    
         问小明有多少种买书方案?(每种书可购买多本)
        */
       cin >> n ; 
    
       int q[4] = {10,20,50,100};
     dp[0] = 1;
       for(int i = 0 ; i < 4 ; i ++)
       {
           for(int j = 1 ; j <= n ; j ++)
           {
               
               if( q[i] <= j)
               {
                   dp[j] += dp[j- q[i]] ;//这里因为需要用到上一层的数 所有顺序遍历
                  //dp[i][j] = dp[i-1][j]+dp[i-1][j-v]; 这里我们在遍历的时候已经得到了i-1所以不需要
               }
              
           }
           
       }
       cout << dp[n] << endl;
       
       return 0 ;
    }
    
  • 相关阅读:
    docker 部署 zabbix
    docker 搭建私有云仓库
    doeker部署zabbix
    LVS
    zabbix安装与配置
    keepalive
    Shell编程(5)
    Shell编程(4)
    Shell编程(3)
    几种Toast用法
  • 原文地址:https://www.cnblogs.com/wk-love-zsy/p/13894360.html
Copyright © 2011-2022 走看看