和Mengjiji一起攻克难关

时间限制: C/C++ 1000ms; Java 2000ms 内存限制: 65535KB

通过次数: 11 总提交次数: 35

问题描述

虽然const_bh的游戏造诣仅高于青铜六选手zbt,但是他的算法造诣也仅高于日常打铁的吃瓜群众zbt。但一日,const_bh偶有奇遇,遇到一位ACMdalao名曰Mengjiji,const_bh非常珍惜这次机会,于是和Mengjiji一起搞了一场比(p)赛(y)。

比赛共有n道题,每道题有一个难度值,比赛要求题目必须按顺序逐个去做,为了减轻的蒟蒻const_bh的压力,Mengjiji把原来的题目序列分成了两个序列,他和const_bh每人各负责一个序列的题目,已知每个人将要面对的挑战值为他所负责的序列的相邻两个数的差的绝对值的总和。Mengjiji身为dalao当然知道怎么分工使两个人的挑战值的和最小了,但是他想考一考const_bh,const_bh当然不会了,于是他偷偷的将这个问题用手机发给了聪明的你。

输入描述

输入包括两行,第一行有一个n(n<=2000),代表题目的总数。

第二行有n个数,第i个数a[i]代表第i道题的难度值为a[i](0<=a[i]<=1000000000).

输出描述

输出仅一行,一个数字代表两个人挑战值和的最小值。

样例输入
5
1 2 1 3 4

样例输出
2

来源
第三届山西省大学生程序设计大赛

提示

将 【1,2,1,3,4】分成【1,1】和【2,3,4】两个序列,第一个序列的挑战值为0,第二个序列的挑战值为2.所以和为2.

思路:

规定dp[i][j](i>j)为A队列中最后一个元素的下标为i,B队列中最后一个元素的下标为j,时各相邻元素绝对值的最小和;

若只有两个元素,则结果为0;

n>2时可能有这么两种情况:

dp[i][i-1]:(相邻的两个元素分别放入两个队列中,在放入下标为i的元素时放到了与i-1不同的队列中),先初始化dp[i][i-1]=dp[i-1][0],再有dp方程dp[i][i-1]=min(dp[i][i-1],dp[i-1][j]+abs(a[i]-a[j]));j:0->i-2

dp[i][j]:(相邻的两个元素放入了同一个队列中,在放入下标为i的元素时放到了与i-1相同的队列中),有dp方程dp[i][j]=dp[i-1][j]+abs(a[i]-a[i-1]);j:0->i-2

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#define me(x,y) memset(x,y,sizeof(x))
#define sd(x) scanf("%d",&x)
#define ss(x) scanf("%s",x)
#define sf(x) scanf("%f",&x)
#define slf(x) scanf("%lf",&x)
#define slld(x) scanf("%lld",&x)
#define pd(x) printf("%d\n",x)
#define plld(x) printf("%lld\n",x)
#define ps(x) printf("%s\n",x)
#define max(x,y) (x>=y?x:y)
#define min(x,y) (x<y?x:y)
#define sum(x,y) (x+y)
#define INF 0x3f3f3f3fusing namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn=2005;ll a[maxn];
ll dp[maxn][maxn];
int n;int main() {sd(n);for(int i=1;i<=n;i++) slld(a[i]);if(n<=2) pd(0);else {dp[2][0]=abs(a[2]-a[1]);for(int i=3;i<=n;i++) {dp[i][i-1]=dp[i-1][0];for(int j=0;j<=i-2;j++) {dp[i][i-1]=min(dp[i][i-1],dp[i-1][j]+abs(a[i]-a[j]));dp[i][j]=dp[i-1][j]+abs(a[i]-a[i-1]);}}ll ans=maxv;for(int i=0;i<n;i++)ans=min(ans,dp[n][i]);plld(ans);}return 0;
}

和Mengjiji一起攻克难关相关推荐

  1. 项目纪实丨MySQL Bug引发客户现场升级失败 万里DBA 6小时攻克难关

    上午10:00 某运营商核心报表平台升级前夕 作为万里数据库的战略合作伙伴,某运营商一直密切关注着国产数据库的发展.其系统中一套基于MySQL8.0.11版本的核心报表平台,近期由于存在安全扫描的漏洞 ...

  2. 从零开始的互联网建立!和班尼特福迪一起攻克难关!——网络基础(写了一半)

    网络基础知识沙雕讲解 从如何建立网络的问题出发,讲解网络中的基础知识 文章目录 网络基础知识沙雕讲解 前言 一.对等网 二.如何扩大网络? 1.怎样延长距离? 2.怎样增加节点? 1.冲突 2.地址问 ...

  3. 成为优秀高级程序员的10个要点(转)

    英文原文:10 Steps to become a Senior Software Engineer What 软件工程师的职业生涯要历经以下几个阶段:初级.中级,最后才是高级.这篇文章主要是讲如何通 ...

  4. 如何在一家内容公司,从零搭建起一支技术团队

    导读:这三年来,我就做了一个产品,那就是得到 App.也搭建起了一支有战斗力的产品技术团队,到今天为止,这个团队一共有 187 人. 2019 年 5 月 26 日,是得到 App 的三周年生日.我做 ...

  5. 程序员,你就是三明治!

    作者:JaJian 来自:cnblogs.com/jajian/p/9853592.html 程序员,你是三明治.为什么这么说?主要是因为程序员上游有产品经理,下游有测试.产品的需求你可以挑三拣四,但 ...

  6. 脚踏实地,自强不息——清华大学大数据软件团队2021年度先进个人风采展示

    清华大学大数据软件团队为充分调动员工积极性和创造性,提升团队综合水平和综合竞争力,组织开展了2021年度"优秀员工"评选工作,团队从组织管理能力.工作完成效力.工作创新能力等方面进 ...

  7. 华为徐文伟:后香农时代,面向数学的十大挑战问题

    本文为2020年8月28日徐文伟在长沙由中国工业与应用数学学会举办的"数学促进企业创新发展论坛"上的发言 来源:中国科学院院刊 徐文伟 华为技术有限公司董事,华为战略研究院院长 后 ...

  8. 现在的人工智能只是“窄AI”?

    来源丨The Next Web 编辑丨科技行者 1956年,由数学系年轻的助理教授John McCarthy领导的科学家小组齐聚新罕布什尔州的达特茅斯学院,计划进行一个为期六周且雄心勃勃的项目:创建一 ...

  9. 谷歌的量子计算机如何改变世界

    来源:网易科技 概要:"可正常运作的话,量子计算机将会改变整个世界,改变事物的运作方式."硅谷知名风投Andreessen Horowitz合伙人.物理学家维贾伊·潘德(Vijay ...

最新文章

  1. 前端学PHP之正则表达式基础语法
  2. 数据库从表中随机选择一行数据
  3. How to Make a Computer Operating System
  4. 【browser】chinese chrome shows as english
  5. ISIS—BGP—VRRP 城域网典型架构图 拓扑实验
  6. ArrayList,LinkedList,Vector的异同点
  7. trietree的一个小练习
  8. HDC.Cloud2021|开发者们都在谈的云原生到底长什么样?
  9. Java——Set 集合
  10. element input 自适应_input高度自适应。
  11. 产品设计:《现代设计史》
  12. (休息几天)读曼昆之微观经济学——供给需求和政府政策
  13. Win11文件类型怎么改?Win11修改文件后缀的方法
  14. 主流营销渠道O2O营销平台特质有哪些
  15. 《大话设计模式》学习笔记:
  16. 饮料自动售货机模拟(小项目)
  17. 我打算去广东第一“鬼城”,买房安家
  18. http返回码301、302、307、305含义和区别
  19. 李群,李代数的几何学心得总结
  20. 效用最大化问题中的三个函数——需求函数、间接效用函数、支出函数

热门文章

  1. 用于深度神经网络的语音信号预处理
  2. [附源码]计算机毕业设计家庭医生签约服务管理系统Springboot程序
  3. 模糊数学简介与模糊综合评价法
  4. 要想成为黑客,离不开这十大基础知识
  5. citespace三天写论文!Bicomb操作实战
  6. 省钱兄外卖CPS小程序源码uniapp源码前端模版
  7. springboot返回时间有错解决方案
  8. 秋招冲刺:网络安全工程师入围成功之旅!!
  9. “骚气”的开源壁纸项目
  10. java中重写和重载的条件