博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
序。。。
阅读量:7240 次
发布时间:2019-06-29

本文共 1135 字,大约阅读时间需要 3 分钟。

题目描述

给定一个长度为n的数列{ai}(i=1,2,3,...,n)。

定义满足ai<=ai+1为单调不减数列。

现在你可以对原数列进行如下两种操作:

1)将数列中任意1个数字加1;

2)将数列中任意1个数字减1.

问:最少操作多少次可以将原数列变为单调不减数列。

输入

单组数据输入,每组数据第一行一个整数n(0<n<5555),

接下来一行n个整数ai(|ai|<1e9,每个数的绝对值小于1e9)。

输出

输出最少操作数。

样例输入

44 3 2 1

样例输出

4 哇!!比赛的时候心态都崩了,被这个题卡了两个多小时。。还是没做出来。 思路:思路比较简单吧! dp,dp[i][j];代表将前i个数转换为最大数为b[j]的单调不减序列的最小代价;
1 #include
2 #include
3 #include
4 5 using namespace std; 6 typedef long long LL; 7 const LL INF = 3e9 + 10; 8 const int maxn = 5600; 9 LL n, ans, dp[maxn],a[maxn], b[maxn];10 int main()11 {12 ios::sync_with_stdio(false);13 while (cin >> n) {14 memset(dp, 0, sizeof(dp));15 for (int i = 1; i <= n; i++) {16 cin >> a[i]; b[i] = a[i];17 }18 sort(b + 1, b + n + 1);19 for (int i = 1; i <= n; i++) {20 for (int j = 1; j <= n; j++) {21 dp[j] += abs(a[i] - b[j]);22 if (j > 1)dp[j] = min(dp[j], dp[j - 1]);23 }24 }25 cout << dp[n] << endl;26 }27 return 0;28 }

 

转载于:https://www.cnblogs.com/wangrunhu/p/9476518.html

你可能感兴趣的文章
ClassCastException[转贴]
查看>>
MySQL vs.MongoDB 各有胜负!
查看>>
寻找最大的K个数,Top K问题的堆实现
查看>>
DDD:在基于关系数据库的领域,聚合的边界等于并发管理的边界。
查看>>
新浪iphone微博小结
查看>>
[置顶] STM32移植contiki进阶之三(中):timer 中文版
查看>>
走进C++程序世界-----继承和派生(2)
查看>>
hdoj 2717 Catch That Cow
查看>>
迟来的2013年度总结
查看>>
NoSql数据库使用半年后在设计上面的一些心得 (转)
查看>>
乐在其中设计模式(C#) - 原型模式(Prototype Pattern)
查看>>
纯JavaScripst的全选、全不选、反选 【转】
查看>>
node-webkit学习(3)Native UI API概览
查看>>
基于Windows 配置 nginx 集群 & 反向代理
查看>>
jquery 新建的元素事件绑定问题研究[转]
查看>>
cacti 添加
查看>>
maven中Rhino classes (js.jar) not found - Javascript disabled的处理
查看>>
LTS学习
查看>>
对SIGQUIT的实验 & Java dump
查看>>
软件架构分类(转载)
查看>>