一道dp错题

news2024/11/25 0:22:19

dis(a,b)就是两点之间的距离公式

那么这道题该怎么解呢,.先看数据范围x,y<=1e4,so,18个点两点之间距离最大18*1e4*sqrt(2)<2^18,所以如果跳过的点大于18个点,那么显然一个区间内最多不会跳跃超过17个点

现在我们想知道前i个点跳跃几次在哪跳跃能够达到最小花费,不妨设跳跃点数为j属于[0,17],k表示上一个跳跃点距离i的长度

设dp[i][j]表示前i个点跳跃j次,那么上一个跳跃点为i-k-1,由于消耗了j个跳跃点当中的4个跳跃点,所以状态转移方程为dp[i][j]=min(dp[i-k-1][j-k]+dis(i,i-k-1)-power(2,j-k-1)+power(2,j-1))为什么要减掉power(2,j-k-1)呢,因为在计算dp[i-k-1][j-k]的时候我们加上过power(2,j-k-1)

首先我们来定义一些基本的数组和变量

constexpr int N = 1e5 + 5;
struct node {
	double x, y;
};
double dp[N][17];
int P[17];
node a[N];
//i,j,k
//前i个点,有j个点是被跳过的,上一个弯曲点距离点i长度为k,
//i的取值范围是[2, n],j的取值范围是[0,min(i-2,16)],k的取值范围是[1,i-2]
//i能够取2是为了计算dp[2][0],j表示的是被跳过的点,那么第一个点和第i个点不能被跳过,而且任意两个点的最大距离为10^4sqrt(10^4)<2^16
//k取1到i-2是因为i-k-1作为起始跳跃点不能为0,且k为0的话起始跳跃点为i的上一个点,两个点之间无法跳跃 
double dis(int x, int y) {
	double diss = (a[x].x - a[y].x) * (a[x].x - a[y].x) + (a[x].y - a[y].y) * (a[x].y - a[y].y);
	diss = std::sqrt(diss);
	return diss;
}
//dis是用来计算两点之间的距离的

接下来我们输入数据

int main() {
	int n;
	std::cin >> n;
	for (int i = 1; i <= n; i++)std::cin >> a[i].x >> a[i].y;
	P[0] = 1;
    //p是2的次幂
	for (int i = 1; i <= 16; i++)P[i] = P[i - 1] * 2;
    //由于要计算min值,所以不妨把数组都初始化成一个很大的值
	for (int i = 1; i <= n; i++) {
		for (int j = 0; j <= 16; j++) {
			dp[i][j] = 1e18;
		}
	}
	return 0;
}

接下来完成核心代码

int main() {
	int n;
	std::cin >> n;
	for (int i = 1; i <= n; i++)std::cin >> a[i].x >> a[i].y;
	P[0] = 1;
	for (int i = 1; i <= 16; i++)P[i] = P[i - 1] * 2;
	for (int i = 1; i <= n; i++) {
		for (int j = 0; j <= 16; j++) {
			dp[i][j] = 1e18;
		}
	}



    //为什么要单独把1拎出来,因为我们之前初始化把dp[1][0]也设成1e18了
    //什么时候会用到1,0?当j==0,i==2,i-1=1时,在下面dp[i][j] = dp[i - 1][j]中会用到
	dp[1][0] = 0;
	for (int i = 2; i <= n; i++) {
		for (int j = 0; j <= std::min(i - 2, 16); j++) {
			//跳跃点数相同,那就只能是上一个点 
			dp[i][j] = dp[i - 1][j] + dis(i, i - 1);
			for (int k = 1; k <= j && i - k - 1 >= 1; k++) {
				dp[i][j] = std::min(dp[i][j], dp[i - k - 1][j - k] + dis(i - k - 1, i) - P[j - k - 1] + P[j - 1]);
			}
		}
	}
	double ans = 1e20;
	for (int j = 0; j <= 16; j++) {
		ans = std::min(ans, dp[n][j]);
	}
	std::cout << std::fixed << std::setprecision(3) << ans << '\n';
	return 0;
}

分别枚举i到j的范围,由于i-1不在状态转移方程的范围内,所以我们要在每一次枚举k之前特殊计算一次dp[i][j]=dp[i-1][j]+dis(i,i-1);

以上就是这道题的详细解答,还需勤加练习

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

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

相关文章

STM32(GPIO)

GPIO简介 GPIO&#xff08;General Purpose Input Output&#xff09;通用输入输出口 引脚电平&#xff1a;0V~3.3V&#xff0c;部分引脚可容忍5V 输出模式下可控制端口输出高低电平&#xff0c;用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等 输入模式下可读取端口的高低电…

迄今为止最全- 前端性能优化

简介 当我们说前端性能优化的时候&#xff0c;指的可能是不同场景的性能优化。前端涉及性能优化的场景主要有&#xff1a; 项目构建性能优化 页面性能优化 加载时性能优化 运行时性能优化 构建性能主要指构建速度&#xff0c;优化方法和打包工具直接相关&#xff0c;主要…

航空科技:探索飞机引擎可视化技术的新视界

随着航空技术的飞速发展&#xff0c;飞机引擎作为航空器最为关键的部件之一&#xff0c;其性能直接影响到飞机的安全性、经济性和环保性。因此&#xff0c;飞机引擎可视化技术的应用日益成为航空行业研究和发展的热点。 通过图扑将复杂的飞机引擎结构和工作原理以直观、生动的…

[GXYCTF 2019]Ping Ping Ping(内联执行)、[鹤城杯 2021]EasyP ($_SERVER)

目录 [GXYCTF 2019]Ping Ping Ping 内联执行 [鹤城杯 2021]EasyP [PHP_SELF]、$_SERVER[SCRIPT_NAME] 与 $_SERVER[REQUEST_URI] RCE命令注入可参考&#xff1a; RCE漏洞及其绕过——[SWPUCTF 2021 新生赛]easyrce、caidao、babyrce-CSDN博客 [GXYCTF 2019]Ping Ping Pin…

有哪些网络兼职适合大学生参与?揭秘几个简单又实用的兼职机会

有哪些网络兼职适合大学生参与&#xff1f;揭秘几个简单又实用的兼职机会 对于大学生而言&#xff0c;除了专注于学业&#xff0c;利用空余时间参与一些网络兼职&#xff0c;不仅能锻炼个人技能&#xff0c;还能为未来的职业生涯积累宝贵的经验。想象一下&#xff0c;步入社会…

基于SpringBoot + Vue的学生宿舍课管理系统设计与实现+毕业论文(15000字)+开题报告

系统介绍 本系统包含管理员、宿管员、学生三个角色。 管理员&#xff1a;管理宿管员、管理学生、修改密码、维护个人信息。 宿管员&#xff1a;管理公寓资产、管理缴费信息、管理公共场所清理信息、管理日常事务信息、审核学生床位安排信息。 学生&#xff1a;查看公共场所清理…

标准输入输出流(中北大学-程序设计基础(2))

目录 题目 源码 结果示例 题目 输入三角形的三边a,b,c&#xff0c;计算三角形的面积。形成三角形的条件是ab>c,bc>a,ac>b&#xff0c;编写程序&#xff0c;输入a,b,c&#xff0c;检查a,b,c是否满足以上条件&#xff0c;如不满足&#xff0c;由cerr输出有关出错信息…

IDEA设置 | 个性化设置

&#x1f64b;大家好&#xff01;我是毛毛张! &#x1f308;个人首页&#xff1a;神马都会亿点点的毛毛张 文章目录 前言IDEA自动生成序列化ID 前言 本篇博客将专注于整理IDEA新UI界面的相关设置 IDEA自动生成序列化ID CtrlAltS快捷键打开设置界面 选择Editor→Inspections…

MyBatis——使用MyBatis完成CRUD

CRUD&#xff1a;Create Retrieve Update Delete 1、insert <insert id"insertCar">insert into t_car(id,car_num,brand,guide_price,produce_time,car_type)values(null,1003,五菱宏光,30.0,2020-09-18,燃油车); </insert> 这样写显然是写死的&#…

大模型微调方法汇总

微调方法 Freeze方法P-tuning方法 prefix-tuningPrompt TuningP-tuning v1P-tuning v2Lora方法 重要相关参数LoRA 的优势Qlora方法 相关参数微调经验 模型选择模型大小选择数据处理微调方案英文模型需要做词表扩充吗&#xff1f;如何避免灾难遗忘大模型的幻觉问题微调后的输出…

2024第八季完美童模 【星光】品牌赛区 【直通】赛 完美收官

2024年5月1日&#xff0c;春风徐徐的【星光品牌赛区】热闹非凡&#xff0c;备受瞩目的第八季完美童模【星光品牌赛区】赛区【直通赛】在这一天正式拉开了帷幕。比赛现场&#xff0c;童模们身着华服&#xff0c;在舞台上演绎了“亚特兰蒂斯”的时尚主题赛。 参赛选手们身着带有海…

新店2个月盈利6万,就是因为做对了这六个步骤,教你正确起店步骤

大家好&#xff0c;我是电商花花。 2024年依然能做抖音小店&#xff0c;因为就按照我们这边团队的实操经验来看。 抖音小店不仅可以做&#xff0c;而且即便是新手小白也可以做&#xff0c;只要掌握抖音小店背后的运营方法和起店步骤&#xff0c;就能很快出单并做起来。 今天…

【Linux】Linux安装JDK

一、卸载Linux自带的JDK #查询已有的JDK rpm -qa | grep jdk ①将查询到的JDK全部卸载掉 #直接复制一整行的JDK名称 yum -y remove java-1.7.0-openjdk-headless-1.7.0.261-2.6.22.2.el7_8.x86_64 ②卸载完第一个后再次查询 ③继续卸载&#xff0c;卸载完成后再次查询 ④查询…

如何将draw.io的图导入word

解决办法&#xff08;有点点复杂&#xff09; 先在http://draw.io导出格式为svg矢量图格式&#xff0c;然后用visio打开svg&#xff0c;调整完界面等等之后再保存&#xff0c;然后在word里面插入visio

simulink-仿真以及PID参数整定/PID tuner 的使用流程

控制器搭建与参数整定 搭建一个前馈PID控制器控制系统PID tuner使用 一个懂点控制但不多的小白&#xff0c;因为需要利用simulink仿真&#xff0c;所以不得不学习一些仿真的知识&#xff0c;这篇文章适合和我一样的新手入门&#xff0c;有理解错误的地方希望大手们能够指出来共…

volatile详解、原理

文章目录 一、Volatile的定义和作用1.1 Volatile简介1.2 Volatile作用 二、并发编程中的三个问题&#xff1a;可见性、原子性、有序性二、Java内存模型&#xff08;JMM&#xff09;三、volatile变量的特性3.1 线程可见性3.2 禁止重排序禁止重排序原理禁止重排序举例 3.3 volati…

七、e2studio VS STM32CubeIDE之显示中文编码

目录 一、概述/目的 二、查看和修改文件编码 三、eclipse编码格式 3.1 优先级 3.1.1 全局workspace 3.1.2 工程 3.1.3 文件 3.1.4 全局文件的content type 二、STM32CubeIDE设置显示中文编码 二、e2studio设置显示中文编码 七、e2studio VS STM32CubeIDE之显示中文编…

【Linux】网络接口绑定和组合的操作实例

网络接口绑定和组合的操作实例 &#xff08;一&#xff09;网卡1. 增2. 查3. 激活——设置网络接口 &#xff08;二&#xff09;网络接口绑定1. 概述2. 实验操作3. 删除绑定 &#xff08;三&#xff09;网络接口组合1. 概述2. 实验操作 &#xff08;一&#xff09;网卡 1. 增 …

第十五篇:全面防护:构建不容侵犯的数据库安全策略与实战指南

全面防护&#xff1a;构建不容侵犯的数据库安全策略与实战指南 1. 引言&#xff1a;数据库安全的现代战略 1.1 简介&#xff1a;数据库安全在当今的数字化时代中的重要性 在数字化的浪潮中&#xff0c;数据已成为企业乃至国家的核心资产&#xff0c;其价值不亚于实体世界的黄…

【JavaEE初阶系列】——博客系统(编写服务器/前后端交互代码)

目录 &#x1f6a9;部署页面需求 &#x1f6a9;准备工作 &#x1f6a9;获取博客列表页 &#x1f6a9;博客详情页 &#x1f6a9;实现登录页面 &#x1f388;强制要求登录 &#x1f388;显示用户信息 &#x1f6a9;退出登录 &#x1f6a9;发布博客 &#x1f6a9;部署页面…