线性dp+中位数,POJ3666 Making the Grade

目录

一、题目

1、题目描述

2、输入输出

2.1输入

2.2输出

3、原题链接

二、解题报告

1、思路分析

2、复杂度

3、代码详解


一、题目

1、题目描述

2、输入输出

2.1输入

2.2输出

3、原题链接

3666 -- Making the Grade (poj.org)


二、解题报告

1、思路分析

先不考虑题目的问题,先明确一点,给定一个整数序列a,求一整数x使得Σ|a[i] - x|最小,那么x为序列a中的中位数,证明很简单,类似于剥洋葱:

对于本题而言,要求得到非严格递增/递减的序列b,使得Σ|ai - bi|最小

假设前k个数字已经得到b1~bk,那么对于ak+1,如果ak+1 >= ak,那么我们直接取bk+1 = ak+1

否则,令bj ~ bk+1取aj ~ ak+1的中位数,我们先不关心j如何取,我们得出一个结论:b序列都是a序列中的数

我们先将a升序/降序排列,因为题目要求所以我们要升序降序各dp一次

定义状态f[i][j]为bi = aj时的前i个差的绝对值之和的最小值

那么f[i][j] = min(f[i - 1][j]) + abs(a[i] - b[j])

2、复杂度

时间复杂度: O(nlogn)空间复杂度:O(n^2)

3、代码详解

#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <climits>
using namespace std;
const int N = 2005;
int n, a[N], b[N];
long long f[N][N], ans = LLONG_MAX;
void solve()
{for (int i = 1; i <= n; i++)f[1][i] = abs(a[1] - b[i]);for (int i = 1; i <= n; i++){long long mi = LLONG_MAX;for (int j = 1; j <= n; j++)f[i][j] = (mi = min(mi, f[i - 1][j])) + abs(a[i] - b[j]);}for (int i = 1; i <= n; i++)ans = min(ans, f[n][i]);
}
int main()
{//freopen("in.txt", "r", stdin);ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);cin >> n;for (int i = 1; i <= n; i++)cin >> a[i], b[i] = a[i];sort(b + 1, b + n + 1);solve();reverse(b + 1, b + n + 1);solve();cout << ans;return 0;
}

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

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

相关文章

寻找完全平方数——浮点数陷阱

【题目描述】 输出所有形如aabb的4位完全平方数&#xff08;即前两位数字相等&#xff0c;后两位数字也相等&#xff09;。 【解析】 一、问题分析 从问题出发&#xff0c;题目要求输出的是满足一定条件的数。数在计算机中是要占存储空间的&#xff0c;要在计算机中表示一个…

力扣---接雨水---单调队列

题目&#xff1a; 单调队列思想&#xff1a; 没有思路的小伙伴可以先把这个想清楚哦&#xff1a;力扣hot10---大根堆双端队列-CSDN博客 从上面的图就可以发现&#xff0c;如果柱子呈递减序列&#xff0c;那么不会接到雨水&#xff0c;只要有一个小凸起柱子&#xff0c;那么这个…

变换,动画

面试题——需求&#xff1a;在不知道父元素与子元素的宽高时 如何让子元素在父元素内居中&#xff1f; 1.定位 父相子绝 2.子元素 top&#xff1a;50% left:50% 3.子元素 transform: translate(-50%,-50%) .parent{height: 500px;background-color: red;position: relative;}.c…

2024年新手视频剪辑软件推荐-6款视频剪辑软件测评

视频剪辑软件推荐 premiere premiere 直达地址:各大软件网站 说到底,还是得专业的来,虽然很多人觉得他是收费的,但是你懂的,想要免费总是会有办法的.别的不说,剪辑这块,我还是很认可这个软件,虽然我现在还是刚入门. 剪映 剪映 抖音官方推出的一款手机视频编辑剪辑应用,提供切割…

回顾 CESS 在 ETHDenver:2024,数据价值网络之年

ETHDenver 2024 是全球最大的 Web3 BUIDLathon 活动之一&#xff0c;吸引了来自各地的区块链爱好者、开发者和建设者。作为一个汇聚了全球的技术爱好者和创新者的社区驱动创新节&#xff0c;ETHDenver 不断推动区块链技术、文化和教育的融合发展。今年的活动已聚集数万名社区成…

基于极大似然算法的系统参数辨识matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于极大似然算法的系统参数辨识。对系统的参数a1&#xff0c;b1&#xff0c;a2&#xff0c;b2分别进行估计&#xff0c;计算估计误差以及估计收敛曲线&#xff0…

设计模式 代理模式

代理模式主要使用了 Java 的多态&#xff0c;主要是接口 干活的是被代理类&#xff0c;代理类主要是接活&#xff0c; 你让我干活&#xff0c;好&#xff0c;我交给幕后的类去干&#xff0c;你满意就成&#xff0c;那怎么知道被代理类能不能干呢&#xff1f; 同根就成&#xff…

光网络:SONET、SDH、DWDM的区别

SONET&#xff08;Synchronous Optical Network&#xff09;、SDH&#xff08;Synchronous Digital Hierarchy&#xff09;和DWDM&#xff08;Dense Wavelength Division Multiplexing&#xff09;都是在光纤通信领域中使用的关键技术。它们在提供高容量、高效率、可靠性等方面…

【Tauri】(4):使用Tauri1.5版本+candle框架运行大模型,前后的搭建运行成功,整合前端项目,在应用中显示。

1&#xff0c;视频地址 关于tauri 框架 2&#xff0c;搭建rust 环境 # 设置服务器国内代理&#xff1a; export RUSTUP_DIST_SERVER"https://rsproxy.cn" export RUSTUP_UPDATE_ROOT"https://rsproxy.cn/rustup"# 设置环境变量 export RUSTUP_HOME/data/…

sort函数详解

往期文章推荐&#xff1a; [C] 非常实用的知识点-CSDN博客 1.8编程基础之多维数组————14:扫雷游戏地雷数计算-CSDN博客 &#xff08;并不怎么华丽的分割线&#xff09; 前言 话说在C中有这么一类算法&#xff0c;叫做排序算法。 它有许多分支&#xff1a;冒泡排序&a…

基于springboot实现图书推荐系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现图书馆推荐系统演示 摘要 时代的变化速度实在超出人类的所料&#xff0c;21世纪&#xff0c;计算机已经发展到各行各业&#xff0c;各个地区&#xff0c;它的载体媒介-计算机&#xff0c;大众称之为的电脑&#xff0c;是一种特高速的科学仪器&#xff0c;比…

猫头虎分享已解决Bug || 数据中心断电:PowerLoss, DataCenterBlackout

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …