思路:

  • 动态规划+离散化
  • 数据范围过大,需要离散化:A【】是原数组,U【】是去重数组,dp【】是代价。
  • 心路历程:
    1. 最核心的:每改一个数必定不会改成一个在全数组中从未出现过的新数。dp 依据)
    2. dp[i][j] 代表前 i 个数符合某规则并且将最后一个元素改成数字 j 所付出的总代价,得到一个 TLE
    3. 使用滚动数组,将 dp[maxn][maxn] 改成一维,仍然 TLE
    4. 使用变量 PRESUM,降低时间复杂度。
  • 注意:
    1. 两种规则(不升\不降)只需要一次 reverse
    2. 用到的STL:unique、reserve、min_element 。

代码:

  • 朴素dp:TLE
​//TLE#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define INF 0x3f3f3f3fusing namespace std;const int maxn = 2005;int N;
int M;
int ans;
int A[maxn];
int U[maxn];
int dp[maxn][maxn]; int SOLVE(){for(int i=0;i<M;i++)dp[0][i] = abs(A[0] - U[i]);for(int i=1;i<N;i++){for(int j=0;j<M;j++){int MIN = INF;for(int k=0;k<=j;k++)//前面的(i-1)个数优化到全部(x)于U[j]的非(x)序列 的代价 MIN = min(MIN , dp[i-1][k]);dp[i][j] = MIN + abs(A[i] - U[j]);}}return *min_element(dp[N-1] , dp[N-1] + M);
}int main(){cin>>N;for(int i=0;i<N;i++)cin>>A[i] , U[i] = A[i];sort(U , U + N);M = unique(U , U + N) - U;ans = INF;ans = min(ans , SOLVE());reverse(U , U + N);ans = min(ans , SOLVE());cout<<ans<<endl;return 0;
}​
  • 滚动数组:TLE
​//TLE#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define INF 0x3f3f3f3fusing namespace std;const int maxn = 2005;int N;
int M;
int ans;
int A[maxn];
int U[maxn];
int dp[maxn]; int SOLVE(){memset(dp , 0 , sizeof(dp));for(int i=0;i<N;i++){for(int j=M-1;j>=0;j--){//注意需要改成倒序int MIN = INF;for(int k=0;k<=j;k++)//前面的(i-1)个数优化到全部(x)于U[j]的非(x)序列 的代价MIN = min(MIN , dp[k]);dp[j] = MIN + abs(A[i] - U[j]);}}return *min_element(dp , dp + M);
}int main(){cin>>N;for(int i=0;i<N;i++)cin>>A[i] , U[i] = A[i];sort(U , U + N);M = unique(U , U + N) - U;ans = INF;ans = min(ans , SOLVE());reverse(U , U + N);ans = min(ans , SOLVE());cout<<ans<<endl;return 0;
}​
  • PRESUM:79ms 748kB
​//79ms      748kB#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define INF 0x3f3f3f3fusing namespace std;const int maxn = 2005;int N;
int M;
int ans;
int A[maxn];
int U[maxn];
int dp[maxn]; int SOLVE(){memset(dp , 0 , sizeof(dp));for(int i=0;i<N;i++){int PRESUM = INF;for(int j=0;j<M;j++){PRESUM = min(PRESUM , dp[j]);dp[j] = PRESUM + abs(A[i] - U[j]);}}return *min_element(dp , dp + M);
}int main(){cin>>N;for(int i=0;i<N;i++)cin>>A[i] , U[i] = A[i];sort(U , U + N);M = unique(U , U + N) - U;ans = INF;ans = min(ans , SOLVE());reverse(U , U + N);ans = min(ans , SOLVE());cout<<ans<<endl;return 0;
}​

【S - Making the Grade】相关推荐

  1. 最全的MySQL基础【燕十八传世】

    1.课前准备! 开启mysql服务:1).配置环境变量;2).net start mysql 将该sql文件导入到你的数据库中,以下所有操作都是基于该数据库表操作的!!! [此笔记是本人看着视频加上自 ...

  2. 【从蛋壳到满天飞】JS 数据结构解析和算法实现-哈希表

    前言 [从蛋壳到满天飞]JS 数据结构解析和算法实现,全部文章大概的内容如下: Arrays(数组).Stacks(栈).Queues(队列).LinkedList(链表).Recursion(递归思 ...

  3. Python3 爬虫学习笔记 C16【数据储存系列 — Redis】

    Python3 爬虫学习笔记第十六章 -- [数据储存系列 - Redis] 文章目录 [16.1]关于 Redis [16.2]使用 Redis [16.3]Key(键)操作 [16.4]Strin ...

  4. 重温《数据库系统概论》【第一篇 基础篇】【第3章 关系数据库标准语言SQL】

    本篇内容为中国人民大学教授王珊.萨师煊的<数据库系统概论>自学课程的复习笔记,学习视频源于小破站(传送门),对应视频P16-P27,属教材"[第一篇 基础篇]"的&qu ...

  5. _【超详细指北】python大作业!

    [超详细指北]python大作业! ​ 这是笔者最近写python大作业时写的一个实现过程笔记,也就是基本上可以说是本人从0开始上手的一个python练习.程序和本文档从 4.29-5.15日 总共历 ...

  6. 【C#Windows 窗体应用】实现简单学生查询成绩,管理员管理学生成绩

    [C#Windows 窗体应用]实现简单学生查询成绩,管理员管理学生成绩功能 已经上传到 https://gitee.com/biflcy/student-management-system 给颗小心 ...

  7. MySQL PK,FK,视图,索引,引擎总结【12000字概览MySQL】用于查漏补缺

    Java养成计划----学习打卡第七十四,五,六天 内容导航 主键的注意要点 外键约束 foreign key FK 父子的顺序 外键约束的创建格式 存储引擎 SHOW ENGINES\G 常用引擎 ...

  8. 【快速上手mac必备】常用优质mac软件推荐(音视频、办公、软件开发、辅助工具、系统管理、云存储)

    本文章的主要内容是我作为一名大四学生.准程序员.up主这三种身份来给大家推荐一下 mac 上好用的软件以及工具.本人也是从去年9月份开始从windows阵营转移到了mac阵营,刚开始使用的时候,也曾主 ...

  9. 【C++自我精讲】基础系列二 const

    [C++自我精讲]基础系列二 const 0 前言 分三部分:const用法.const和#define比较.const作用. 1 const用法 const常量:const可以用来定义常量,不可改变 ...

最新文章

  1. 12岁上中科大,17岁哈佛博士,31岁成哈佛教授,学神认识一下?
  2. LeetCode Algorithm 35. 搜索插入位置
  3. 2016-04-29 二分查找的面试题
  4. 【操作系统】Semaphore处理读者-写者问题
  5. 再来一波不错的学习资源
  6. Hive中的排序语法
  7. 【洛谷 P4886】 快递员 (点分治)
  8. xshell连接成功但无法输入命令_如何解决cisco设备无法进入系统问题?
  9. python实现用户登录_Python实现简单的用户登录功能并且限制次数
  10. 合工大计算机学院吴辽源,计算机学院智能计算系统系召开人才培养大讨论专题会议...
  11. 单片机、ARM与DSP对比
  12. DBSCAN聚类算法原理和伪代码
  13. android 微信浮窗实现_Android 悬浮窗功能的实现
  14. 微信小程序模板消息接口下线了,不用慌,调用统一服务消息接口来实现相同功能
  15. 2022年最新NFT 开发平台解决方案
  16. 两种链表的实现以及例题思路分享
  17. 基于机器学习的新闻文本分类
  18. PH10全彩 LED屏 64*16 点阵显示4个汉字调试心得
  19. 2023四大服装管理软件,第1款最受欢迎!
  20. 百度云管家5.0.0 绿色优化版

热门文章

  1. winxp死亡倒计时,大家快安装使用汉澳sinox!
  2. 最浪漫的十大精典爱情句子.......
  3. Buzzer Speaker
  4. 办公室日常工作生活常用购置品汇总(都是便宜货)——19-7-6更新
  5. 百度网盘的音乐怎么分享到qq音乐里?
  6. windows7 android 驱动,Win7系统安装手机驱动的方法【图文】
  7. 天使童装微信小程序支付流程:
  8. kubernetes Kustomize
  9. 关于 OGRE 与 OSG 的简单比较 (转)
  10. ES6函数与Lambda演算