砝码称重【第十二届蓝桥杯】【省赛】【B组】
砝码称重【第十二届蓝桥杯】【省赛】【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组】相关推荐
- 砝码称重 第十二届蓝桥杯B组
你有一架天平和 NN 个砝码,这 NN 个砝码重量依次是 W1,W2,⋅⋅⋅,WNW1,W2,···,WN. 请你计算一共可以称出多少种不同的正整数重量? 注意砝码可以放在天平两边. 输入格式 输入的 ...
- 2021年第十二届蓝桥杯省赛B组(C/C++)第二场题解
文章目录 2021年第十二届蓝桥杯省赛B组(C/C++)第二场题解 1.求余 2.双阶乘 3.格点 4.整数分解 5.城邦 6.特殊年份 7.小平方 8.完全平方数 9.负载均衡 10.国际象棋 20 ...
- 十二届蓝桥杯省赛B组C++解析(填空题部分)
十二届蓝桥杯省赛B组C++解析(填空题部分) 目录 十二届蓝桥杯省赛B组C++解析(填空题部分) A:空间 B:卡片 C:直线 D:货物摆放 E:路径 A:空间 该题是一道计算机基础原理题,这里需要了 ...
- 2021年软件类第十二届蓝桥杯 省赛 python组 F-J题解
2021年软件类第十二届蓝桥杯 省赛 python组 F-J题解 文章目录 2021年软件类第十二届蓝桥杯 省赛 python组 F-J题解 试题 F:时间显示 题目描述 输入描述 输出描述 输入输出 ...
- 2021第十二届蓝桥杯省赛B组C/C++ 试题 E: 路径
2021第十二届蓝桥杯省赛B组C/C++ 试题 E: 路径 代码 试题 E: 路径 Ans=10266837 我哭了 最短路径的题考前刷了多少道,最后还是在考场翻车 还是太菜啊啊.. 首先是边权图的初 ...
- 2021年第十二届蓝桥杯省赛B组(C/C++)个人题解
Problem A 空间 计组基础题:256MB=256 * 2^20 * 8 位 所以存放32位元素可以存放 256 * 1024 * 1024 * 8 / 32 ans: 67108864 送分题 ...
- 2021年第十二届蓝桥杯省赛B组C/C++部分填空题解
题A: 看到题意很容易算出答案就是256乘1024乘1024乘8除以32 答案:67108864 题B: 直接模拟就好了,用一个数组来记录每个数字的次数,暴力到数组该数字不够时,就不能表示完这个数字. ...
- 第十二届蓝桥杯省赛A组砝码称重Java解题思路及代码
[问题描述] 你有一架天平和 N个砝码,这N个砝码重量依次是W1, W2, -, Wn. 请你计算一共可以称出多少种不同的重量?注意砝码可以放在天平两边. [输入格式] 输入的第一行包含一个整数N. ...
- 第十二届蓝桥杯省赛JavaC组【第二场】真题——详细答案对照(完整版)
目录 #A 浮点数 #B 求余 #C 双阶乘 #D 格点 #E 整数分解 #F 3 的倍数 #G 特殊年份 #H 小平方 #I 完全平方数 #J 负载均衡 #A 浮点数 本题总分:5 分 问题描述 I ...
- 第十二届蓝桥杯省赛A组试题:左儿子右兄弟Java
[问题描述] 对于一棵多叉树,我们可以通过 "左孩子右兄弟" 表示法,将其转化成一棵二叉树.如果我们认为每个结点的子结点是无序的,那么得到的二叉树可能不唯一.换句话说,每个结点可以 ...
最新文章
- 6个强大的PHP/Mysql代码生成器介绍
- UVA11624 Fire!(bfs)
- 5分钟搞懂如何使用探针检查Kubernetes健康
- 大量linux内存被cached
- metasploit快速入门(二)收集信息
- r.java没有生成_r.java文件没有生成
- 使用proxy来调用未定义的属性方法
- 心得体悟帖---开解语录2
- clickhouse语句_Siem落地方案:初识clickhouse
- fastjson对Date的处理
- Cholesky分解及一个例子
- 网站服务器的宽带是1mb是什么意思,1mb/s网速是什么意思
- jquery Colorbox 传值
- python 新词发现
- c语言随机数字密码生成器,随机数生成器(浮点数整型数)
- java生成图章到word_JAVA不使用POI给Word文档添加水印
- python大数据计算_大数据计算平台 python
- 易智联LM401模块学习(一)——初识Lora
- 服务器虚拟环境使用指南
- 图片单张预测和批量预测
热门文章
- (二)open image dataset v5 数据集解析
- 标定代码:张正友标定法(matlab工具箱自编程序)(matlab)
- 在《我的世界》里挖钻石把AI难哭了,DeepMind最新算法终于扳回颜面
- Mac10.14.2删除自带ABC输入法(OK!)
- java int 带下划线,Java-int 中加下划线
- 【华为OD机试真题 JS】连续出牌数量
- JDBC连接oracle,mysql,sqlserver数据库
- 机器学习初级篇12——浅谈向量的各种积
- 苹果公开了其AI研究的第一个大图像数据集
- curdate mysql 语句,使用MySQL的CURDATE()或PHP的date()更快?