蓝桥杯每日一真题——[蓝桥杯 2021 省 AB] 砝码称重(背包dp)

文章目录

      • 题目详情:
  • [蓝桥杯 2021 省 AB] 砝码称重
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例
      • 样例输入
      • 样例输出
    • 提示
      • 思路:
      • 方法:
      • 全部代码:
      • 注意事项

题目详情:

[蓝桥杯 2021 省 AB] 砝码称重

题目描述

你有一架天平和 N N N 个砝码, 这 N N N 个砝码重量依次是 W 1 , W 2 , ⋯   , W N W_{1}, W_{2}, \cdots, W_{N} W1,W2,,WN 。 请你计算一共可以称出多少种不同的重量?

注意砝码可以放在天平两边。

输入格式

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

第二行包含 N N N 个整数: W 1 , W 2 , W 3 , ⋯   , W N W_{1}, W_{2}, W_{3}, \cdots, W_{N} W1,W2,W3,,WN

输出格式

输出一个整数代表答案。

样例

样例输入

3
1 4 6

样例输出

10

提示

【样例说明】

能称出的 10 种重量是: 1 、 2 、 3 、 4 、 5 、 6 、 7 、 9 、 10 、 11 1 、 2 、 3 、 4 、 5 、 6 、 7 、 9 、 10 、 11 123456791011

1 = 1 2 = 6 − 4 (  天平一边放  6 ,  另一边放 4)  3 = 4 − 1 4 = 4 5 = 6 − 1 6 = 6 7 = 1 + 6 9 = 4 + 6 − 1 10 = 4 + 6 11 = 1 + 4 + 6 \begin{aligned} &1=1 \\ &2=6-4(\text { 天平一边放 } 6, \text { 另一边放 4) } \\ &3=4-1 \\ &4=4 \\ &5=6-1 \\ &6=6 \\ &7=1+6 \\ &9=4+6-1 \\ &10=4+6 \\ &11=1+4+6 \end{aligned} 1=12=64( 天平一边放 6, 另一边放 4) 3=414=45=616=67=1+69=4+6110=4+611=1+4+6

【评测用例规模与约定】

对于 50 % 50 \% 50% 的评测用例, 1 ≤ N ≤ 15 1 \leq N \leq 15 1N15

对于所有评测用例, 1 ≤ N ≤ 100 , N 1 \leq N \leq 100, N 1N100,N 个砝码总重不超过 1 0 5 10^5 105

蓝桥杯 2021 第一轮省赛 A 组 F 题(B 组 G 题)。


思路:

如果把每一个砝码想像成物品的话那么这个物品有增加这个和减少这个两种状态,
那么一共可能放的砝码总重就是这个物品的容量。那这个题就是一个明显的背包问题,如果你还不会背包问题请移步:背包问题

方法:

1.可以循环物品和背包(能放多重的砝码(也就是砝码总和))看当前的砝码能否充满当前的背包容量。能就1,不能就0,最后看把n个物品放进去有多少个背包是充满的。

2·dp[][]数组的定义,这个问题是让我们求能有多少中放法,有两种状态,一个是当前将第几个物品放入,一个是当前物品的重量是否能充满当前的背包;这样的话我们可以让dp[放入第i个物品][当前物品的重量]=当前物品的重量是否能充满当前的背包;

3.分为四种状态

  1. 不放砝码,上一次物品怎样我就怎样能成就成不能成就散。 dp[i][j] = dp[i - 1][j];
  2. 天平上只有当前的砝码 if (w[i] == j) dp[i][j] = 1;
  3. 加上当前砝码重量else if (dp[i - 1][j + w[i]] == 1) dp[i][j] = 1;
  4. 减去当前砝码重量 else if (dp[i - 1][abs(j - w[i])] == 1) dp[i][j] = 1;

4·统计。(自己统计去)

5·当然这个也可以压缩成滚动数组的形式不过这样的比较好理解

全部代码:

#include <iostream>
using namespace std;
int n, w[101], smax, ans;
bool dp[101][100001];
int main()
{
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        cin >> w[i];
        smax = smax + w[i]; // 把所有砝码都加起来就是最大值
    }
    dp[0][0] = 1;
    // 双重循环,遍历dp。
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= smax; j++)
        {
           
            dp[i][j] = dp[i - 1][j]; // 不放砝码,沿用上一个的状态
            if (w[i] == j)
                dp[i][j] = 1; // 只放现在的那个砝码。
            else if (dp[i - 1][j + w[i]] == 1)
                dp[i][j] = 1;//加上当前砝码重量
            else if (dp[i - 1][abs(j - w[i])] == 1)
                dp[i][j] = 1; //减去当前砝码重量(可能是砝码-物体也可能是物体减砝码)
            if (dp[n][j] == 1)
                ans++;//放完n个物品看看那些重量是符合的
        }
    }
    cout << ans << "c0re"<<endl;
    system("pause");
    return 0;
}

注意事项

首先在那四个状态的时候如果你这个第一个状态也就是不放砝码的状态也可以写成

if (j == w[i]) dp[i][j] = 1;

但这样写就会发生一个问题!有一些状态没有被记录,这个时候要把背包的遍历顺序反过来写

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/1829.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

可换皮肤的Qt登录界面

⭐️我叫忆_恒心,一名喜欢书写博客的在读研究生👨‍🎓。 如果觉得本文能帮到您,麻烦点个赞👍呗! 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三连支持一下呗。👍⭐️❤️ 可换皮肤的Qt登录界面 QSS的学习笔记 快…

上手使用百度文心一言

3月16日&#xff0c;在距离新一代的GPT模型GPT-4发布还不足一天的时间内&#xff0c;百度便发布了对标ChatGPT的人工智能产品&#xff0c;名字叫&#xff1a;文心一言。成为国内首页发布该类型产品的公司。 那么&#xff0c;我们今天就来试一试百度的文心一言好不好用。 首先&a…

【SpringMVC】SpringMVC方式,向作用域对象共享数据(ModelAndView、Model、map、ModelMap)

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ 向域对象共享数据一、使用 原生ServletAPI二、…

DJ2-4 进程同步(第一节课)

目录 2.4.1 进程同步的基本概念 1. 两种形式的制约关系 2. 临界资源&#xff08;critical resource&#xff09; 3. 生产者-消费者问题 4. 临界区&#xff08;critical section&#xff09; 5. 同步机制应遵循的规则 2.4.2 硬件同步机制 1. 关中断 2. Test-and-Set …

【数据结构】二叉树(OJ)

文章目录单值二叉树相同的树另一棵树的子树对称二叉树翻转二叉树二叉树遍历二叉树的最大深度二叉树的前序遍历二叉树的中序遍历二叉树的后序遍历单值二叉树 如果二叉树每个节点都具有相同的值&#xff0c;那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时&#xff0c;才…

C/C++每日一练(20230319)

目录 1. 反转链表 II &#x1f31f;&#x1f31f; 2. 解码方法 &#x1f31f;&#x1f31f; 3. 擅长编码的小k &#x1f31f;&#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 …

基于微信小程序的校园二手交易平台小程序

文末联系获取源码 开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7/8.0 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 浏览器…

spark第三章:工程化代码

系列文章目录 spark第一章&#xff1a;环境安装 spark第二章&#xff1a;sparkcore实例 spark第三章&#xff1a;工程化代码 文章目录系列文章目录前言一、三层架构二、拆分WordCount1.三层拆分2.代码抽取总结前言 我们上一次博客&#xff0c;完成了一些案例的练习&#xff0…

Linux实操之进程管理

文章目录一、基本介绍二、显示系统执行的进程基本介绍三、ps详解四、终止进程kill和killall介绍:●基本语法常用选项五、查看进程树pstree基本语法常用选项一、基本介绍 1&#xff0e;在LINUX中&#xff0c;每个执行的程序都称为一个进程。每一个进程都分配一个ID号(pid,进程号…

咪咕MGV3201_ZG_GK国科6323_UWE5621DS_免拆卡刷固件包

咪咕MGV3201_ZG_GK国科6323_UWE5621DS_免拆卡刷固件包 特点&#xff1a; 1、适用于对应型号的电视盒子刷机&#xff1b; 2、开放原厂固件屏蔽的市场安装和u盘安装apk&#xff1b; 3、修改dns&#xff0c;三网通用&#xff1b; 4、大量精简内置的没用的软件&#xff0c;运行…

【springcloud 微服务】Spring Cloud Alibaba Sentinel使用详解

目录 一、前言 二、分布式系统遇到的问题 2.1 服务可用性问题 2.1.1 单点故障 2.1.2 流量飙升 2.1.3 容错机制 2.2 服务雪崩问题 三、 服务可用性解决方案 3.1 服务容错机制 3.1.1 超时机制 3.1.2 服务限流 3.1.3 隔离 3.2 服务熔断 3.2.1 什么是服务熔断 3…

Transformer到底为何这么牛

从注意力机制&#xff08;attention&#xff09;开始&#xff0c;近两年提及最多的就是Transformer了&#xff0c;那么Transformer到底是什么机制&#xff0c;凭啥这么牛&#xff1f;各个领域都能用&#xff1f;一文带你揭开Transformer的神秘面纱。 目录 1.深度学习&#xff0…

Leetcode.1292 元素和小于等于阈值的正方形的最大边长

题目链接 Leetcode.1292 元素和小于等于阈值的正方形的最大边长 Rating &#xff1a; 1735 题目描述 给你一个大小为 m x n的矩阵 mat和一个整数阈值 threshold。 请你返回元素总和 小于或等于 阈值的正方形区域的最大边长&#xff1b;如果没有这样的正方形区域&#xff0c;则…

Thread的小补丁

Thread小补丁线程状态NewRunnableWaitingTimed_waitingBlocked线程安全线程的抢占式执行同时对同一个变量进行修改指令重排序操作不是原子的解决方案万恶之源优化我们自己的代码Synchronized和Volatile上一篇博客中,我们简单介绍了线程Thread的一些知识,一些基本的使用,但是单单…

用Qt画一个温度计

示例1 以下是用Qt绘制一个简单的温度计的示例代码&#xff1a; #include <QPainter> #include <QWidget> #include <QApplication> class Thermometer : public QWidget { public:Thermometer(QWidget *parent 0); protected:void paintEvent(QPaintEvent …

【MySQL】聚合查询

目录 1、前言 2、插入查询结果 3、聚合查询 3.1 聚合函数 3.1.1 count 3.1.2 sum 3.1.3 avg 3.1.4 max 和 min 4、GROUP BY 子句 5、HAVING 关键字 1、前言 前面的内容已经把基础的增删改查介绍的差不多了&#xff0c;也介绍了表的相关约束&#xff0c; 从本期开始…

如何在Unity中实现AStar寻路算法及地图编辑器

文章目录AStar算法简介实现Node节点节点间的估价算法核心邻节点的搜索方式地图编辑器简介实现绘制地图网格障碍/可行走区域地图数据存储AStar算法 简介 Unity中提供了NavMesh导航寻路的AI功能&#xff0c;如果项目不涉及服务端它应该能满足大部分需求&#xff0c;但如果涉及服…

M1/M2 Pro VMware Fusion虚拟机安装Win11教程(超详细)

前言 最近换了新电脑 —— M2 Pro&#xff0c;属于是结束了二十多年的Windows生涯了。但是有些东西又必须在Windows系统上去搞。 比如 易语言开发、运行一些exe的软件等等&#xff0c;没办法&#xff0c;搞个虚拟机&#xff0c;装个Win11吧。 下面进入正题&#xff1a; 一、安装…

直面风口,未来不仅是中文版ChatGPT,还有AGI大时代在等着我们

说到标题的AI2.0这个概念的研究早在2015年就研究起步了&#xff0c;其实大家早已知道&#xff0c;人工智能技术必然是未来科技发展战略中的重要一环&#xff0c;今天我们就从AI2.0入手&#xff0c;以GPT-4及文心一言的发布为切入角度&#xff0c;来谈一谈即将降临的AGI时代。 关…

【python进阶】你真的懂元组吗?不仅是“不可变的列表”

&#x1f4da;引言 &#x1f64b;‍♂️作者简介&#xff1a;生鱼同学&#xff0c;大数据科学与技术专业硕士在读&#x1f468;‍&#x1f393;&#xff0c;曾获得华为杯数学建模国家二等奖&#x1f3c6;&#xff0c;MathorCup 数学建模竞赛国家二等奖&#x1f3c5;&#xff0c…
最新文章