【备战蓝桥杯】吃奶酪问题 / 超硬核,文附template拓展知识!

蓝桥杯备赛 | 洛谷做题打卡day9

文章目录

  • 蓝桥杯备赛 | 洛谷做题打卡day9
      • 再来了解一下状压dp
        • **简介(Introduction)**
        • **描述(Description)**
  • - 吃奶酪
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
    • 提示
        • 数据规模与约定
        • 提示
    • * template拓展知识
    • 我的一些话

【引入】今天的题目要用到 动态规划DP的知识,因此先给大家普及一下背景:

​ 动态规划法是20世纪50年代由贝尔曼(R. Bellman)等人提出,用来解决多阶段决策过程问题的一种最优化方法。所谓多阶段决策过程,就是把研究问题分成若干个相互联系的阶段,由每个阶段都作出决策,从而使整个过程达到最优化。许多实际问题利用动态规划法处理,常比线性规划法更为有效,特别是对于那些离散型问题。实际上,动态规划法就是分多阶段进行决策,其基本思路是:按时空特点将复杂问题划分为相互联系的若干个阶段,在选定系统行进方向之后,逆着这个行进方向,从终点向始点计算,逐次对每个阶段寻找某种决策,使整个过程达到最优,故又称为逆序决策过程。

​ 其基本思想是将原问题分解为相似的子问题,在求解的过程中通过子问题的解求出原问题的解。动态规划的思想是多种算法的基础,被广泛应用于计算机科学和工程领域。动态规划的实质是分治思想解决冗余,因此,动态规划是一种将问题实例分解为更小的、相似的子问题,并存储子问题的解而避免计算重复的子问题,以解决最优化问题的算法策略。

  • 再来了解一下状压dp

简介(Introduction)

状压DP即状态压缩DP,指通过特殊的方法来压缩存储所要表达的状态。

描述(Description)

状态压缩DP属于DP问题中比较困难的一类问题,对于状态的压缩模拟和对题目状态的转移需要较强的理解。

- 吃奶酪

题目描述

房间里放着 n n n 块奶酪。一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在 ( 0 , 0 ) (0,0) (0,0) 点处。

输入格式

第一行有一个整数,表示奶酪的数量 n n n

2 2 2 到第 ( n + 1 ) (n + 1) (n+1) 行,每行两个实数,第 ( i + 1 ) (i + 1) (i+1) 行的实数分别表示第 i i i 块奶酪的横纵坐标 x i , y i x_i, y_i xi,yi

输出格式

输出一行一个实数,表示要跑的最少距离,保留 2 2 2 位小数。

样例 #1

样例输入 #1

4
1 1
1 -1
-1 1
-1 -1

样例输出 #1

7.41

提示

数据规模与约定

对于全部的测试点,保证 1 ≤ n ≤ 15 1\leq n\leq 15 1n15 ∣ x i ∣ , ∣ y i ∣ ≤ 200 |x_i|, |y_i| \leq 200 xi,yi200,小数点后最多有 3 3 3 位数字。

提示

对于两个点 ( x 1 , y 1 ) (x_1,y_1) (x1,y1) ( x 2 , y 2 ) (x_2, y_2) (x2,y2),两点之间的距离公式为 ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 \sqrt{(x_1-x_2)^2+(y_1-y_2)^2} (x1x2)2+(y1y2)2


在这里插入图片描述

学会利用新知,自己多试试并尝试积攒一些固定解答方案,debug,以下是题解代码 ~

#include<cstdio>
#include<cmath>
#include<cstring>
typedef double db;//typedef 自定义数据类型,可用于简化书写,例如此行将double数据类型简写成db
db x[20],y[20],f[20][35000];
template<class T> T min(T a,T b) {return a<b?a:b;}//Template泛型编程,关于它的详细解释我会在文末给出,感兴趣可自行阅读
db dis(int a,int b) {return sqrt((x[a]-x[b])*(x[a]-x[b])+(y[a]-y[b])*(y[a]-y[b]));}//定义距离函数
int main()
{int n;scanf("%d",&n);for(int i=1;i<=n;i++) scanf("%lf%lf",&x[i],&y[i]);memset(f,127,sizeof(f));//初始化集合为最大值for(int s=1;s<=(1<<n)-1;s++)//位运算符<<,1<<n表示对数字1进行左移n位操作。这意味着将二进制数1向左移动n个位置,然后用0填充右侧空出的位,总之这个操作相当于将1乘以2的n次方for(int i=1;i<=n;i++){if((s&(1<<(i-1)))==0) continue;if(s==(1<<(i-1))) {f[i][s]=0;continue;}for(int j=1;j<=n;j++){if((s&(1<<(j-1)))==0||i==j) continue;f[i][s]=min(f[i][s],f[j][s-(1<<(i-1))]+dis(i,j));}}db ans=-1;for(int i=1;i<=n;i++){db s=f[i][(1<<n)-1]+dis(i,0);if(ans==-1||ans>s) ans=s;}printf("%.2lf\n",ans);return 0;
}

* template拓展知识

关于题解中template T min(T a,T b) {return a<b?a:b;}的详细解释:

这是一个C++的函数模板,用于比较两个值并返回较小的那个值。让我们逐步解释这个函数模板的各个部分:

1.template<class T>:这是函数模板的声明,表明接下来的函数定义中将使用一个通用类型 T。通用类型允许在调用函数时传递不同类型的参数。
2.T min(T a, T b):这是函数模板的定义。它接受两个参数 a 和 b,这两个参数的类型都是 T。函数返回类型仍然是 T,因为我们要返回两者中较小的那个值。
3.{return a<b?a:b;}:这是函数的实际实现。它使用条件运算符 a < b ? a : b 来比较 a 和 b 的大小。如果 a 小于 b,则返回 a,否则返回 b。

让我们看一个简单的例子,如果你调用 min 函数模板并传递两个整数:
int result = min(3, 7);

在这种情况下,T 将被推导为 int,因为传递的参数是整数。函数将返回 3,因为 3 小于 7。这个函数模板可以灵活地适用于不同类型的参数,包括整数、浮点数等。

*想了解更多关于template知识的可以留言喔,之后可以进一步深入向大家科普泛型编程知识 (^-^)!

我的一些话

  • 今天算是动态规划dynamic planning初步啦,状压dp确实有一定难度,需要通盘的考虑和理解,以及扎实的基础才能独立写出AC代码。但无论难易,大家都要持续做题,保持题感喔!一起坚持(o´ω`o)

  • 总结来说思路很重要,多想想,多在草稿纸上画画,用测试数据多调试,debug后成功编译并运行出正确结果真的会感到很幸福!

  • 关于之前蓝桥杯备赛的路线和基本方法、要掌握的知识,之前的博文我都有写,欢迎大家关注我,翻阅自取哦~

  • 不管什么都要坚持吧,三天打鱼两天晒网无法形成肌肉记忆和做题思维,该思考的时候一定不要懈怠,今天就说这么多啦,欢迎关注留言,一起成长:)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python数字图像处理基础(十)——背景建模

目录 背景建模背景消除-帧差法混合高斯模型 背景建模 背景建模是计算机视觉和图像处理中的一项关键技术&#xff0c;用于提取视频中的前景对象。在视频监控、运动检测和行为分析等领域中&#xff0c;背景建模被广泛应用。其基本思想是通过对视频序列中的像素进行建模&#xff…

如何设置Windows 11的WSL系统用作备用桌面环境

如何设置Windows 11的WSL系统用作开发环境&#xff08;含Astrill设置&#xff09; 如何设置Windows 11的WSL系统用作备用桌面环境 引子&#xff1a; 2023年末&#xff0c;公司突然遭遇网络攻击&#xff0c;调整了防火墙设置&#xff0c;连接VPN用来飞X软件&#xff0c;与原来…

GoZero微服务个人探究之路(零)个人对微服务产生原因的思考,对前三篇的补充

为什么产生了微服务架构--必要性 这里我觉得看GoZero作者写的博文就可以有很好的体会 具体的&#xff0c;他画了这一张图&#xff08;以电商后台系统为例子&#xff09; 所以&#xff0c;我个人产生了如下思考 1.业务逻辑越来越复杂&#xff0c;层层嵌套&#xff0c;分解成微…

渗透测试(14)- HTTP协议解析

HTTP(HyperText Transfer Protocol)即 超文本传输协议 &#xff0c;是一种详细规定了浏览器和 服务器之间互相通信的规则&#xff0c;它是万维网交换信息的基础&#xff0c;它允许将 HTML( 超文本标 记语言 ) 文档从 Web 服务器传送到Web 浏览器&#xff0c;用于客户端和服务器…

十二、Qt 操作PDF文件(2)

一、在《十、Qt 操作PDF文件-CSDN博客》中我们用Poppler类库打开了PDF文件&#xff0c;并显示到窗体上&#xff0c;但只能显示一页&#xff0c;功能还没完善&#xff0c;在本章节中&#xff0c;加入了&#xff1a; 通过选择框选择PDF文件并打开&#xff0c;默认打开第一页。通…

实战 | 奇怪的万能密码

本文由掌控安全学院 - 杳若 投稿 前言 打的站点打多了&#xff0c;什么奇怪的问题都会发生 打点 开局一个登录框 用户枚举到账号爆破 测了一下&#xff0c;没发现admin的弱口令&#xff0c;但是发现存在用户枚举漏洞&#xff0c;因此准备跑一下账号 输入密码为123456 进行…

华清远见作业第三十天——网络编程(第五天)

思维导图&#xff1a; 使用selsect实现TCP客户端的并发 代码 #include<a.h> #define SER_PORT 8888 //服务器端口号 #define SER_IP "192.168.125.50" //服务器ip地址 #define CLI_PORT 6666 //客户端的端口号 #define CLI_I…

阿里云PolarDB开发者大会首度召开,让数据库开发像“搭积木”一样简单

1月17日&#xff0c;首届阿里云PolarDB开发者大会在京举办&#xff0c;中国首款自研云原生数据库PolarDB发布“三层分离”全新版本&#xff0c;基于智能决策实现查询性能10倍提升、节省50%成本。面向开发者&#xff0c;阿里云全新推出数据库场景体验馆、训练营等系列新举措&…

什么是ThreadLocal,有什么用?

文章目录 一、ThreadLocal是什么&#xff1f;二、作用常用应用场景总结 一、ThreadLocal是什么&#xff1f; ThreadLocal 是 Java 中的一个类&#xff0c;用于创建线程局部变量。线程局部变量是一种特殊的变量&#xff0c;每个线程都拥有自己独立的变量副本&#xff0c;互不影…

axios原理

文章目录 axios基本概念axios多种方式调用工具函数axios的拦截器如何实现&#xff1f;用的设计模式是哪种&#xff1f;axios如何实现取消请求&#xff0c;和cancelToken如何使用 axios基本概念 axios是目前比较流行的一个js库&#xff0c;是一个基于promise的网络数据请求库&am…

C++ 并发编程 | 进程与线程

一、进程与线程 1、进程 1.1、定义 操作系统中最核心的概念就是进程&#xff0c;进程是对正在运行中的程序的一个抽象&#xff0c;是系统进行资源分配和调度的基本单位。进程是一种抽象的概念&#xff0c;一般由程序、数据集合和进程控制块三部分组成&#xff0c;如下&#x…

乐观锁与悲观锁:高并发场景下的选择

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

实战纪实 | 记一次攻防演练

看到一处登录后台&#xff0c;各种操作都尝试过无果&#xff0c;翻了一下js,看到一处文件上传接口泄露&#xff08;没图了&#xff0c;已经整改了&#xff09; 构造上传数据包&#xff0c;很nice,上传成功 直接连接webshell&#xff0c;搭建隧道进行内网穿透 翻看配置文件&…

python两数之和

给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回…

笙默考试管理系统---countop

笙默考试管理系统---countop 目录 笙默考试管理系统---countop 一、 笙默考试管理系统-MyExamTest----countop 二、 笙默考试管理系统-MyExamTest----countop 三、 笙默考试管理系统-MyExamTest----countop 四、 笙默考试管理系统-MyExamTest----countop 五、 笙默…

TCP 拥塞控制对数据延迟的影响

哈喽大家好&#xff0c;我是咸鱼 今天分享一篇文章&#xff0c;是关于 TCP 拥塞控制对数据延迟产生的影响的。作者在服务延迟变高之后进行抓包分析&#xff0c;结果发现时间花在了 TCP 本身的机制上面&#xff1a;客户端并不是将请求一股脑发送给服务端&#xff0c;而是只发送…

【开源】基于JAVA语言的河南软件客服系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统管理人员2.2 业务操作人员 三、系统展示四、核心代码4.1 查询客户4.2 新增客户跟进情况4.3 查询客户历史4.4 新增服务派单4.5 新增客户服务费 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的河…

字符串不可变性以及StringBuilder和StringBuffer在字符串拼接中的作用和扩容机制

java字符串的不可变性 在jdk1.8及以前&#xff0c;字符串底层存储用的是一个字符&#xff08;char&#xff09;类型的数组&#xff0c;jdk1.9之后用的是整型中的字节型&#xff08;byte&#xff09;数组来存储字符串。以下下主要以jdk1.8为例子展开。 private final char value…

新能源汽车出海业务之报关

引言 在做中国新能源汽车出海业务的信息化建设过程&#xff0c;秉承着深入了解业务的原则&#xff0c;对业务全链路进行学习了解总结&#xff0c;本文是针对出口报关业务环节的一些个人积累总结&#xff0c;供与诸位交流学习。 业务概述 报关是指在国际贸易中&#xff0c;出口…

Day34 贪心算法 part03 1005. K 次取反后最大化的数组和 134. 加油站 135. 分发糖果

贪心算法 part03 1005. K 次取反后最大化的数组和 134. 加油站 135. 分发糖果 1005. K 次取反后最大化的数组和 思路 第一步&#xff0c;从前向后遍历&#xff0c;遇到负数将其变为正数&#xff0c;同时K–第二步&#xff1a;如果K还大于0&#xff0c;那么反复转变数值最小的…