蓝桥杯--砝码称重(dp)

2023-11-01

砝码称重

题目评测

你有一架天平和 N 个砝码,这 N 个砝码重量依次是 W1,W2,⋅⋅⋅,WN。

请你计算一共可以称出多少种不同的正整数重量?

注意砝码可以放在天平两边。
输入格式

输入的第一行包含一个整数 N

第二行包含 N
个整数:W1,W2,W3,⋅⋅⋅,WN

输出格式

输出一个整数代表答案。
数据范围

对于 50%
的评测用例,1≤N≤15。
对于所有评测用例,1≤N≤100,N 个砝码总重不超过 1e5。

思路

很容易想到是dp,但需要注意的是对于负数的称重如何处理。
dp[i][j]代表前i个砝码是否可以称出j的重量,dp[i][j]=1表示存在=0表示不存在。
状态转移方程:当dp[i-1][j]=1时,第i个砝码重量为a
dp[i][j]=1,第i个砝码不使用
dp[i][j+a]=1,第i个砝码和之前能称出的重量j相加
dp[i][j-a]=1,两相减
dp[i][a-j]=1,两相减
这四个状态代表了,当前i-1个砝码能称出j重量时可以和新加入的砝码称出的四个新状态,但这个重量可能会有负数的,所以默认加上100000当作一个偏移量,最后计算结果再减去即可。

这个代码状态我优化了一下空间,思路还是一样的。
Ac Code

#include<iostream>
using namespace std;
const int Max = 1e6 + 5;

int dp[Max];
int ls[Max];

int main()
{
	int n;cin >> n;
	dp[100000] = 1;
	for (int i = 1;i <= n;i++)
	{
		int a;cin >> a;
		int g = 0;
		for (int j = 0;j <= 200000;j++)
		{
			if (dp[j] >= 1)
			{
				ls[++g] = (j + a);
				ls[++g] = (j - a);
				ls[++g] = (a - j);
			}
		}
		for (int j = 1;j <= g;j++)
		{
			dp[ls[j]]++;
		}
	}
	int ans = -1;

	for (int i = 100000;i <= 200000;i++)if (dp[i]) ans++;
	cout << ans;
}

思路二

其时当发现一个重量可以得负数,再和以后的状态做加减转化时,正数减去也能代表负数,
如 有砝码 2 1 3
前俩可以拼凑出的状态 1 2 3 -1,
3 + (-1)和 3 - 1 效果是一样的,所以负的重量状态抛弃掉最后结果也是不变的

化简Code

#include<iostream>
using namespace std;

int dp[105][100005];

int main()
{
	int n;cin >> n;
	dp[0][0] = 1;
	for (int i = 1;i <= n;i++)
	{
		int a;cin >> a;
		for (int j = 0;j <= 100000;j++)
		{
			if (dp[i-1][j])
			{
				dp[i][j] = 1;
				dp[i][j + a] = 1;
				dp[i][abs(j - a)] = 1;
			}
		}
	}
	int ans = 0;
	for (int i = 1;i <= 100000;i++)if (dp[n][i]) ans++;
	cout << ans;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

蓝桥杯--砝码称重(dp) 的相关文章

  • 1124:成语接龙 dfs+一维数组保存结果

    题目描述 小明在玩成语接龙的游戏 成语接龙的规则是 如果成语A的最后一个汉字与成语B的第一个汉字相同 那么成语B就可以接到成语A的后面 小明现在手上有一本成语词典 每次他都得花费一定时间来从当前的成语查到下一个可以接在后面的成语 现在给你一
  • floyd算法 O(n^3)

    标准弗洛伊德算法 三重循环 循环结束之后 d i j 存储的就是点 i 到点 j 的最短距离 需要注意循环顺序不能变 第一层枚举中间点 第二层和第三层枚举起点和终点 特点 1 复杂度为O n 3 只能处理200以内的点 2 一次求出所有结点
  • Java 使用itextPdf7操作pdf,写入照片这一篇就够了

    Java 使用itextPdf7操作pdf 写入照片这一篇就够了 1 效果图 1 1 M N列图片 无边界 有边界 1 2 图片重叠 1 3 文字背景图片 1 4 图片与文字相邻 图片文字Rowspan样式 1 5 一个单元格多图片 多图片
  • 【DP练习】美元DOLLARS

    1040 练习题目 美元DOLLARS Description 在以后的若干天里戴维将学习美元与德国马克的汇率 编写程序帮助戴维何时应买或卖马克或美元 使他从100美元开始 最后能获得最高可能的价值 Input 输入文件的第一行是一个自然数
  • 最大子矩阵(动态规划c++)

    题目描述 已知矩阵的大小定义为矩阵中所有元素的和 给定一个矩阵 你的任务是找到最大的非空 大小至少是1 1 子矩阵 比如 如下4 4的矩阵 0 2 7 0 9 2 6 2 4 1 4 1 1 8 0 2 的最大子矩阵是 9 2 4 1 1
  • 蓝桥杯--砝码称重(dp)

    砝码称重 题目评测 你有一架天平和 N 个砝码 这 N 个砝码重量依次是 W1 W2 WN 请你计算一共可以称出多少种不同的正整数重量 注意砝码可以放在天平两边 输入格式 输入的第一行包含一个整数 N 第二行包含 N 个整数 W1 W2 W
  • 【测评】PaMu Unique真无线蓝牙耳机,国潮新时尚,年轻人的标配

    本文作者为体验师 喝酸奶舔盖斯基 首发于糖纸众测 目 录 测评信息 外观设计 通话降噪 CD音质 续航持久 佩戴舒适 测评信息 产品名称 神偷奶爸小黄人系列真无线蓝牙耳机 设备型号 T6D 辅测设备 荣耀MagicBook笔记本 小米8手机
  • Python 对图像进行base64编码及解码读取为numpy、opencv、matplot需要的格式

    Python 对图像进行base64编码及解码读取为numpy opencv matplot需要的格式 1 效果图 2 源码 参考 这篇博客将介绍Python如何对图像进行base64编解码及读取为numpy opencv matplot需
  • 程序员最全的Linux命令,不全来找我随时更新!

    一 引言 1 1 Linux引言 Linux是一套免费使用和自由传播的类Unix操作系统 是一个基于POSIX和Unix的多用户 多任务 支持多线程和多CPU的操作系统 伴随着互联网的发展 Linux得到了来自全世界软件爱好者 组织 公司的
  • 砝码称重问题【dp】

    设有 1g 2g 3g 5g 10g 20g 的砝码各若干枚 其 总重 1000g 要 求 输入 a1 a2 a3 a4 a5 a6 表示 1g 砝码有 a1 个 2g 砝码有 a2 个 20g 砝码有 a6 个 输出 Total N N
  • hdu 1069 Monkey and Banana

    Problem acm hdu edu cn showproblem php pid 1069 Reference www cnblogs com kuangbin archive 2011 08 04 2127291 html 题意 给
  • hdu 1080 Human Gene Functions

    Problem acm hdu edu cn showproblem php pid 1080 Meaning 给出一个二维表 similarity 表示对应核苷酸配对时的相似度值 横杠 表示用空格代替一个核苷酸 给出两个DNA序列 a 和
  • AI工具究竟是帮手还是对手?你怎么看,一起来聊聊吧!

    AI工具究竟是帮手还是对手 你怎么看 一起来聊聊吧 1 你现在正在哪个领域学习或工作呢 你用过哪些AI智能工具 2 作为行业人士或正在学习的学生 你认为AI工具的出现会提升你的工作或学习效率吗 3 对于AI智能工具的出现 我们应该做好哪些准
  • [HDU 5079][2014 Asia AnShan Regional Contest]Square(DP套DP)

    题目链接 http acm hdu edu cn showproblem php pid 5079 题目大意 给你一个 n n n 8 n middot n n le 8 的棋盘 上面有一些格子必须是黑色 其它可以染黑或者染白 对于一个棋盘
  • Acwing2554. 排列数

    在一个排列中 一个折点是指排列中的一个元素 它同时小于两边的元素 或者同时大于两边的元素 对于一个 1 n 的排列 如果可以将这个排列中包含 t 个折点 则它称为一个 t 1 单调序列 例如 排列 1 4 2 3 是一个 3 单调序列 其中
  • 备战2023蓝桥国赛-传纸条

    题目描述 解析 这道题想了我好久 一开始我是想假如只走一条路线 从 1 1 走到 m n 这种问题该怎么解决呢 针对这种问题我是设了dp k i j 表示走了k步到达 i j 的好心程度之和的最大值 然后根据这个来写出转移方程来计算 后面就
  • 【DP】拔河比赛

    题目 一个学校举行拔河比赛 所有的人被分成了两组 每个人必须 且只能够 在其中的一组 要求两个组的人数相差不能超过1 且两个组内的所有人体重加起来尽可能地接近 输入 输入数据的第1行是一个n 表示参加拔河比赛的总人数 n lt 100 接下
  • 计算机网络学习笔记第四章(网络层)超详细整理

    目录 4 1 网络层概述 1 简介 2 总结 4 2 网络层提供的两种服务 1 面向连接的虚电路服务 2 无连接的数据报服务 3 虚电路服务与数据报服务的对比 4 3 IPv4 1 概述 2 分类编制的IPv4地址 2 1 简介 2 2 总
  • AtCoder Beginner Contest 332 G. Not Too Many Balls(最大流转最小割 dp)

    题目 n n lt 500 种球 第i种有ai 0 lt ai lt 1e12 个球 m m lt 5e5 个盒子 第j个能放bj 0 lt bj lt 1e12 个球 特别地 第j个盒子最多能放i j个第i种球 求m个盒子能放的最多的球的
  • 插入数计数类 / 转为换行类dp:AT_agc024_e

    https www luogu com cn problem AT agc024 e 首先题目可以转化成每次插入一个数 满足字典序递增 如果只考虑暴力dfs 先别上dp 想想怎么合法和不算重 合法 也就是插入数有3种情况 插到末尾 插到比他

随机推荐

  • 迅雷下载器无限制版_无敏感_无限速

    迅雷下载器5 8 下载链接 链接 https pan baidu com s 1ZYf1aRwZvW4PUT7qO0lKIg 提取码 if5x 速度如图 转载于 https www cnblogs com yzhyingcool p 109
  • CSS使网页适应不同屏幕大小(最实用的rem基础屏幕的适配方案)

    先看代码 复制使用即可 以下代码均可复制粘贴使用 我将以注释的形式解释代码左右 如您满意请给莫成尘点个Fabulous 牛顿说过 我之所以看得远 是因为我站在巨人的肩膀上 我们充分借鉴了element antd等的方案来适配 需 要 注 意
  • kafka消息删除机制

    kafka过期消息删除过程 有时候总觉得我的消息没到7天就被删除了 我还以为是我的kafka配置没有生效 了解到 kafka删除机制后才恍然大悟 kafka消息首先由用户设定一个或多个partition 每个partition中kafka会
  • 光圈

    镜头上写 1 1 8 说明该镜头的最大光圈是f 1 8 F number 光圈值 F number 指的是focal length number aperture 光圈 光圈指得是镜头中间开孔的大小 光圈的作用在于决定镜头的进光量 光圈值越
  • 机器学习基础篇(十二)——多层感知机

    机器学习基础篇 十二 多层感知机 一 概述 多层感知机 MLP Multi Layer Perceptron 由感知机 PLA Perceptron Learning Algorithm 推广而来 它最主要的特点是有多个神经元层 因此也叫深
  • 大咖云集,EI稳定检索,第14届机器学习与计算国际会议(ICMLC 2022)

    14th ICMLC 2022 第14届机器学习与计算国际会议 2月18 21日 中国广州 关于我们 机器学习是人工智能及模式识别领域的共同研究热点 其理论和方法已被广泛应用于解决工程应用和科学领域的复杂问题 为了给机器学习与计算研究领域的
  • 自带win10系统换win7的那些坑

    自带win10系统换win7的那些坑 这两天真是经历了一个换系统的巨坑 如果说这次换系统是一部历史的话那也一定是一部血泪史 今日4000多字的记录会把这部血泪史中的血和泪一一道出 不为别的只为 前车之鉴后事之师 更多内容请关注微信公众号 u
  • QTableView如何插入图片(ICON)在文字的右边

    QTableView如何插入图片 ICON 在文字的右边方法一 QStyledItemDelegate 继承自 QAbstractItemDelegate 主要用于为 Model View 中的数据项提供显示和编辑功能 采用继承QStyle
  • JavaScript运算符优先级

    JavaScript 运算符优先级 是描述在计算机运算计算表达式时执行运算的先后顺序 先执行具有较高优先级的运算 然后执行较低优先级的运算 例如 我们常说的先执行相乘和除 再执行加减运算 JavaScript 运算符 圆括号处理Javasc
  • yarn.lock、package-lock.json、npm-shrinkwrap.json的区别

    总的来说yarn lock和package lock json起的作用相同 只不过yarn是默认的 npm到5以后才会出现lock package lock json是npm5的新特性 也不向前兼容 如果npm版本是4或以下 那得用npm
  • JavaScript HTML DOM

    JavaScript HTML DOM 文档对象模型 是一种用于访问和操作HTML文档元素的编程接口 它将HTML文档表示为一个树形结构 使开发人员可以使用JavaScript来操作和修改HTML元素 属性 样式和事件 通过使用HTML D
  • Vue研习录(04)——列表渲染详解及示例分析

    Vue研习录 04 列表渲染详解及示例分析 版权声明 一 v for 二 维护状态 三 v for 与对象 四 在 v for 里使用范围值 版权声明 本文原创作者 清风不渡 博客地址 https blog csdn net WXKKang
  • 【STM32】时钟系统RCC

    目录 一 时钟树 1 时钟源 2 高速外部时钟信号 HSE 3 低速外部时钟信号 LSE 4 系统时钟 SYSCLK 5 时钟输出 MCO 6 AHB 参考文献 一 时钟树 本文以STM32F103为例 将本人所知的关于STM32的时钟系统
  • Java实战项目二(超详细)---奔跑吧小恐龙

    奔跑吧小恐龙是一款简单的跑酷游戏 代码简单 适合初学者学习 玩家控制小恐龙向前狂奔 躲避沿途出现的石头和仙人掌 跑的越远 分数越高 游戏内还增加了背景音乐 跳跃音乐和碰撞音乐 本文的代码虽然长 但不难理解 希望大家能够耐心看完 文中代码均可
  • EXCEL VBA连接SQL数据库

    说明 EXCEL VBA连接SQL数据库一般有以下3个步骤 1 VBA连接数据库之前需要创建连接对象 可以采用以下方式 Dim CN As Object Set CN CreateObject ADODB Connection 也可以通过添
  • 数据库应用 --- Yelp Data Analysis Application

    数据库应用 Yelp Data Analysis Application Overview Basic Info Functionality 初始GUI Simple Business Search Simple User Search 筛
  • 你还不会Python网络爬虫中的requests模块使用《一》

    替代模块 比如说urllib模块 但是在工作中用的最多的还是requests模块 requests的代码简洁易懂 相对于臃肿的urllib模块 使用requests编写的爬虫代码将会更少 而且实现某一功能将会简单 因此建议大家掌握该模块的使
  • ENVI: 如何创建GLT文件并基于GLT对图像进行几何校正?

    这是一条目录 目录 这是一条目录 01 什么是GLT文件 02 案例 1 打开ENVI软件 1 1 软件界面显示效果如下 2 加载需要基于GLT进行几何校正的风云三号卫星影像数据 3 寻找 建立GLT文件 的工具所在位置 4 建立GLT文件
  • PL2303驱动安装需要联网

    问题描述 提示 这里描述具体问题 在使用PL2303驱动时 需要连接网络 例如 USB RS232插入电脑后会在windows10系统设备管理中的其他设备中显示USE Ser 这个表示没有安装驱动 我安装了PL2303驱动后也没办法使用 后
  • 蓝桥杯--砝码称重(dp)

    砝码称重 题目评测 你有一架天平和 N 个砝码 这 N 个砝码重量依次是 W1 W2 WN 请你计算一共可以称出多少种不同的正整数重量 注意砝码可以放在天平两边 输入格式 输入的第一行包含一个整数 N 第二行包含 N 个整数 W1 W2 W