描述 
设有1g、2g、3g、5g、10g、20g的砝码各若干枚(其总重<=100,000),要求:计算用这些砝码能称出的不同重量的个数,但不包括一个砝码也不用的情况。

输入 
一行,包括六个正整数a1,a2,a3,a4,a5,a6,表示1g砝码有a1个,2g砝码有a2个,……,20g砝码有a6个。相邻两个整数之间用单个空格隔开。 
输出 
以“Total=N”的形式输出,其中N为可以称出的不同重量的个数。 
样例输入 
1 1 0 0 0 0 
样例输出 
Total=3 
提示

样例给出的砝码可以称出1g,2g,3g三种不同的重量。

思路: 我们看到每种砝码有num[i]个   如何做这道题呢

我们考虑背包

有不同价值的六种物品 问我们能如何组合获得一共多少种不同的价值 背包问题换个问法

我们发现这个问题其实是把物品的价值和花费合二为一了

对不同物品选几个 其实就能获得多少价值

如何做这道题 由于最大称重已经给出来了 我们如果考虑多重背包
那么首先需要枚举物品

再枚举有效空间 这里的空间就是最大称重

再枚举个数
因为我有100000最大的数 也就是最多有100000个不同的称重可能
我们不妨用d[i]表示i重量称重能够称到
那么如果d[v]能够称到的话前提是d[v-个数*价值]已经称到
所以这个问题其实就是 多重背包问题

#include<bits/stdc++.h>
using namespace std;
int a[] = {0,1,2,3,5,10,20},num[10];
bool dp[100010];
int main()
{int sum=0;for(int i=1;i<=6;i++){scanf("%d",&num[i]);sum+=num[i]*a[i];}dp[0]=1;for(int i=1;i<=6;i++){// 从第一个物品开始枚举 for(int v = sum;v>=0;v--)   // 从最大容量(其实是最大的称重量) for(int j=0;j<=num[i];j++){ // 枚举个数 if(j*a[i]<=v&&dp[v-j*a[i]])dp[v]=1;/*如果这个时候j个a[i]小于v那么也就是说这个称重下不会造成数组越界 并且如果再v-j*a[i]的情况下可以得到 那么再dp[v]的情况也可以得到 因为我现在有j个a[i]*/ }}int c=0;for(int i=1;i<=100010;i++)if(dp[i])c++;printf("%d\n",c);
}

还有一种方法就是用母函数求解:

  设输入的质量为w的砝码n个,则可以用母函数表示为:

  针对本题目,例如输入六种砝码(1g,2g,3g,5g,10g,20g)的个数分别为:1,2,2,0,0,1。则有:

则最终结果就是f1*f2*f3*f4中的次数不同的项 每个不同的项前面的系数就是一共有几种方案能称到这种结果

NOI-砝码称重v2 多重背包 生成函数相关推荐

  1. 【OJ8756】砝码称重V2,可达性多重背包

    砝码称重V2 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 设有1g.2g.3g.5g.10g.20g的砝码各若干枚(其总重<=100,000),要求:计 ...

  2. 蓝桥杯每日真题之砝码称重(01背包)

    题面来源 2021年蓝桥省赛第一场G题 题面连接:http://acm.mangata.ltd/p/P1482 考点 01背包,动态规划 视频讲解 https://www.bilibili.com/v ...

  3. 【SSL】1072砝码称重

    [SSL]1072砝码称重 Time Limit:1000MS Memory Limit:65536K Description 设有1g.2g.3g.5g.10g.20g的砝码各若干枚(其总重< ...

  4. 砝码称重【第十二届蓝桥杯】【省赛】【B组】

    砝码称重[第十二届蓝桥杯][省赛][B组] Description 你有一架天平和N个砝码,这N个砝码重量依次是W1.W2,-WN 请你计算一共可以称出多少种不同的重量? 注意砝码可以放在天平两边. ...

  5. 洛谷 P2347 砝码称重

    P2347 砝码称重 题目描述 设有1g.2g.3g.5g.10g.20g的砝码各若干枚(其总重<=1000), 输入输出格式 输入格式: 输入方式:a1 a2 a3 a4 a5 a6 (表示1 ...

  6. 【DP】砝码称重 (ssl 1072)

    砝码称重 ssl 1072 题目大意: 有6种砝码,每种的个数分别为a1,a2,a3,a4,a5,a6,请问可以平出多少种重量(0除外) Description 设有1g.2g.3g.5g.10g.2 ...

  7. 【codevs2144】砝码称重2,哈希什么的都去死吧

    砝码称重 2 时间限制: 1 s 空间限制: 16000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 有n个砝码,现在要称一个质量为m的物体,请问最少需要挑出几个 ...

  8. Bailian4141 砝码称重【DP】

    4141:砝码称重 总时间限制: 1000ms 内存限制: 65536kB 描述 设有1g.2g.3g.5g.10g.20g的砝码各若干枚(其总重<=1000),要求:计算用这些砝码能称出的不同 ...

  9. 51NOD 1449 砝码称重(贪心+进制思想)

    题目连接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1449 1449 砝码称重 题目来源: CodeForces 基 ...

最新文章

  1. linux ngxtop安装安装及使用
  2. 手把手教你实现PySpark机器学习项目——回归算法
  3. 使用apache模块rewrite_module
  4. 约瑟夫环的数学优化方法
  5. 实现input框的全选和清空
  6. vue如何取消下拉框按回车自动下拉_按逗号拆分Excel单元格,再分离中文数字,春节压岁钱统计就用它...
  7. Linux中写入union作用,Linux进程描述符中union的用法
  8. 【TP5】Thinkphp5初体验1
  9. NIC Bonding on CentOS 7 with nmtui
  10. 最简单的基于FFmpeg的移动端例子附件:SDL Android HelloWorld
  11. 运用CSS3制作3D盒子骰子
  12. QT、C++面试中的几个问题
  13. 银河麒麟服务器无raid驱动安装处理
  14. ffmpeg多种码率控制方式的实现
  15. 有关人工智能方面的调研报告
  16. 记事本开发 dos下编译java 多个类文件_通过记事本编写的java代码通过()命令运行。_学小易找答案...
  17. qgg包-续2-大数据集教程
  18. java无法重命名文件_巧妙地解决Java文件重命名失败的问题
  19. 神奇。cv2.calcHist()函数返回值,灰度值为255的像素个数看似为0。
  20. 经典linux c程序,经典 c 程序 100 例

热门文章

  1. java httpclient发送json 请求 ,go服务端接收
  2. stm32 IAP + APP ==双剑合一
  3. Oracle中的Round和Trunc
  4. EclipsePHP Studio 2008快捷方式
  5. 微软应提前发布专用于ARM处理器的Windows 8平板电脑系统
  6. cross-domain policy file
  7. 整数规划matlab实例,整数规划matlab
  8. JdbcTemplate操作
  9. SecureCRT连接linux时主机名,secureCRT连接linux方法
  10. 【软件开发底层知识修炼】二十八 C/C++中volatile的作用