zoukankan      html  css  js  c++  java
  • 序。。。

    题目描述

    给定一个长度为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)。

    输出

    输出最少操作数。

    样例输入

    4
    4 3 2 1

    样例输出

    4

    哇!!比赛的时候心态都崩了,被这个题卡了两个多小时。。还是没做出来。
    思路:思路比较简单吧! dp,dp[i][j];代表将前i个数转换为最大数为b[j]的单调不减序列的最小代价;

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<cstring>
     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 }
  • 相关阅读:
    C# 一个用到WPF 和 反射的例子.
    Html 效果之 A 标签.
    HttpModule 的权限管理
    C# 入门经典示例.
    CSS 圆角边框
    .NET 平台文件去除行号
    C#调用WinApi关闭电脑屏幕含自动监视有无输入活动检测
    还是XP好啊
    SQL执行效率测试语句
    自用SqlHelper
  • 原文地址:https://www.cnblogs.com/wangrunhu/p/9476518.html
Copyright © 2011-2022 走看看