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

Description

你有一架天平和N个砝码,这N个砝码重量依次是W1、W2,…WN
请你计算一共可以称出多少种不同的重量?
注意砝码可以放在天平两边。

Input

​ 输入的第一行包含一个整数N。(1 ≤ N ≤ 100)

​ 第二行包含N个整数:W1, W2, W3, …WN;
(N个砝码总重不超过100000)

Output

​ 输出一个整数代表答案。

Sample Input

3
1 4 6

Sample Output

10

Pasing

​ 第一反应DFS,把每一种砝码看作3个选择,放在左边、放在右边、不放上去。由此可以得到三种状态:-w[i], +w[i], +0,然后进行深搜,递归每一种情况,然后把最终结果放入set集合中(自动剔重),最后erase(0)即可。

​ 但是这道题直接DFS会TLE,据说可以记忆化搜索,但是我没有尝试。

​ 所以我们再来重新看带上面的思路。本题与洛谷P1877 音量调节类似,其实每一个砝码就是拿或不拿的区别,这时候就很容易想到背包了,背包需要判断拿或者不拿,我们这里判断的是放左边、放右边、不拿。即第拿到第 i 个砝码时要放在第 i - 1 个时的左边还是右边:放在左边就加减掉,放在右边就加上,不拿就保持原来的状态。

​ 也就是说我们需要准备的是拿到第i个砝码时的的状态。我们保存拿到第 i 个砝码时可达的所有重量,做下标记,然后根据这些标记去放第i + 1 个砝码。

Code

#include <iostream>
#include <cmath>using namespace std;int main() {int n;int w[105];int dp[105][100005];int sum = 0;cin >> n;for (int i = 1; i <= n; i++) {cin >> w[i];sum += w[i];}dp[1][w[1]] = 1;//只有一个砝码时,可达的重量只有w[1]for (int i = 2; i <= n; i++) {dp[i][w[i]] = 1;//只放这一个砝码for (int j = 1; j <= sum; j++) {if (dp[i - 1][j] == 1) {//只有前 i - 1 个砝码时可以达到j重量dp[i][j] = 1;//不放第 i 个砝码,j重量也是可达的。int temp1 = abs(j - w[i]);//放左边int temp2 = abs(j + w[i]);//放右边if (temp1 > 0 && temp1 <= sum) {//特判一下防止越界dp[i][temp1] = 1;}if (temp2 > 0 && temp2 <= sum) {dp[i][temp2] = 1;}}}}int cnt = 0;for (int i = 1; i <= sum; i++) {if (dp[n][i] == 1) {//有所有的砝码时可达的重量都被标记为1cnt++;}}cout << cnt << endl;return 0;
}

砝码称重【第十二届蓝桥杯】【省赛】【B组】相关推荐

  1. 砝码称重 第十二届蓝桥杯B组

    你有一架天平和 NN 个砝码,这 NN 个砝码重量依次是 W1,W2,⋅⋅⋅,WNW1,W2,···,WN. 请你计算一共可以称出多少种不同的正整数重量? 注意砝码可以放在天平两边. 输入格式 输入的 ...

  2. 2021年第十二届蓝桥杯省赛B组(C/C++)第二场题解

    文章目录 2021年第十二届蓝桥杯省赛B组(C/C++)第二场题解 1.求余 2.双阶乘 3.格点 4.整数分解 5.城邦 6.特殊年份 7.小平方 8.完全平方数 9.负载均衡 10.国际象棋 20 ...

  3. 十二届蓝桥杯省赛B组C++解析(填空题部分)

    十二届蓝桥杯省赛B组C++解析(填空题部分) 目录 十二届蓝桥杯省赛B组C++解析(填空题部分) A:空间 B:卡片 C:直线 D:货物摆放 E:路径 A:空间 该题是一道计算机基础原理题,这里需要了 ...

  4. 2021年软件类第十二届蓝桥杯 省赛 python组 F-J题解

    2021年软件类第十二届蓝桥杯 省赛 python组 F-J题解 文章目录 2021年软件类第十二届蓝桥杯 省赛 python组 F-J题解 试题 F:时间显示 题目描述 输入描述 输出描述 输入输出 ...

  5. 2021第十二届蓝桥杯省赛B组C/C++ 试题 E: 路径

    2021第十二届蓝桥杯省赛B组C/C++ 试题 E: 路径 代码 试题 E: 路径 Ans=10266837 我哭了 最短路径的题考前刷了多少道,最后还是在考场翻车 还是太菜啊啊.. 首先是边权图的初 ...

  6. 2021年第十二届蓝桥杯省赛B组(C/C++)个人题解

    Problem A 空间 计组基础题:256MB=256 * 2^20 * 8 位 所以存放32位元素可以存放 256 * 1024 * 1024 * 8 / 32 ans: 67108864 送分题 ...

  7. 2021年第十二届蓝桥杯省赛B组C/C++部分填空题解

    题A: 看到题意很容易算出答案就是256乘1024乘1024乘8除以32 答案:67108864 题B: 直接模拟就好了,用一个数组来记录每个数字的次数,暴力到数组该数字不够时,就不能表示完这个数字. ...

  8. 第十二届蓝桥杯省赛A组砝码称重Java解题思路及代码

    [问题描述] 你有一架天平和 N个砝码,这N个砝码重量依次是W1, W2, -, Wn. 请你计算一共可以称出多少种不同的重量?注意砝码可以放在天平两边. [输入格式] 输入的第一行包含一个整数N. ...

  9. 第十二届蓝桥杯省赛JavaC组【第二场】真题——详细答案对照(完整版)

    目录 #A 浮点数 #B 求余 #C 双阶乘 #D 格点 #E 整数分解 #F 3 的倍数 #G 特殊年份 #H 小平方 #I 完全平方数 #J 负载均衡 #A 浮点数 本题总分:5 分 问题描述 I ...

  10. 第十二届蓝桥杯省赛A组试题:左儿子右兄弟Java

    [问题描述] 对于一棵多叉树,我们可以通过 "左孩子右兄弟" 表示法,将其转化成一棵二叉树.如果我们认为每个结点的子结点是无序的,那么得到的二叉树可能不唯一.换句话说,每个结点可以 ...

最新文章

  1. 6个强大的PHP/Mysql代码生成器介绍
  2. UVA11624 Fire!(bfs)
  3. 5分钟搞懂如何使用探针检查Kubernetes健康
  4. 大量linux内存被cached
  5. metasploit快速入门(二)收集信息
  6. r.java没有生成_r.java文件没有生成
  7. 使用proxy来调用未定义的属性方法
  8. 心得体悟帖---开解语录2
  9. clickhouse语句_Siem落地方案:初识clickhouse
  10. fastjson对Date的处理
  11. Cholesky分解及一个例子
  12. 网站服务器的宽带是1mb是什么意思,1mb/s网速是什么意思
  13. jquery Colorbox 传值
  14. python 新词发现
  15. c语言随机数字密码生成器,随机数生成器(浮点数整型数)
  16. java生成图章到word_JAVA不使用POI给Word文档添加水印
  17. python大数据计算_大数据计算平台 python
  18. 易智联LM401模块学习(一)——初识Lora
  19. 服务器虚拟环境使用指南
  20. 图片单张预测和批量预测

热门文章

  1. (二)open image dataset v5 数据集解析
  2. 标定代码:张正友标定法(matlab工具箱自编程序)(matlab)
  3. 在《我的世界》里挖钻石把AI难哭了,DeepMind最新算法终于扳回颜面
  4. Mac10.14.2删除自带ABC输入法(OK!)
  5. java int 带下划线,Java-int 中加下划线
  6. 【华为OD机试真题 JS】连续出牌数量
  7. JDBC连接oracle,mysql,sqlserver数据库
  8. 机器学习初级篇12——浅谈向量的各种积
  9. 苹果公开了其AI研究的第一个大图像数据集
  10. curdate mysql 语句,使用MySQL的CURDATE()或PHP的date()更快?