正题

题目链接:http://poj.org/problem?id=3666


题目大意

给定序列A,B。要求B严格单调,要求最小化

S=∑Ni=1|Ai−Bi|S=∑Ni=1|Ai−Bi|

S=\sum{\begin{matrix}\\N\\i=1\\\\\end{matrix}}|A_i-Bi|


解题思路

根据书上说的数学归纳法,我们可以证明在S最小化的条件下,一定存在一种构造B的方案,使得B中的数值都在A中出现过书上原话
fi,jfi,jf_{i,j}表示完成前i个数,BiBiB_i为jjj时的最小S" role="presentation" style="position: relative;">SSS。
然后我们得出方程

fi,j=min{fi−1,k+|ai−j|}(k<=j)fi,j=min{fi−1,k+|ai−j|}(k<=j)

f_{i,j}=min\{f_{i-1,k}+|a_i-j|\}(k
但是这是十分的慢的,所以我们可以用变量记录最小的 fi−1,kfi−1,kf_{i-1,k},然后离散化A数组,枚举的时候直接用离散化之后的A


code

#include<cstdio>
#include<algorithm>
using namespace std;
int n,ans,a[2001],b[2001],f[2001][2001],val;
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
      scanf("%d",&a[i]),b[i]=a[i];
    sort(b+1,b+1+n);//离散化
    ans=2147483647;
    for(int i=1;i<=n;i++)
    {        val=2147483647;
        for(int j=1;j<=n;j++)
        {            val=min(val,f[i-1][j]);//最小的
            f[i][j]=val+abs(a[i]-b[j]);//动态转移
            if(i==n) ans=min(ans,f[i][j]);//统计答案
        }
    }
    printf("%d",ans);
}

POJ3666-Making the Grade【线性dp】相关推荐

  1. POJ3666 Making the Grade(DP)

    题意:给定长度为n的序列a,构造长度为n的序列b,满足b单调:最小化 思路:在满足S最小化的情况下,一定存在一种构造序列B的方案,使得B中的数值都在A中出现过:dp[i][j]表示完成前i个数的构造, ...

  2. *POJ3666.Making the Grade(DP+离散化)

    题目链接:http://poj.org/problem?id=3666 题意:求将一个序列调整成纯单调(可以相等)的序列所需要的最小代价 解题思路: 分两种情况讨论: ①不减序列:dp[i][j]表示 ...

  3. POJ3666 线性dp+维度优化

    POJ3666 线性dp+维度优化 题面 POJ3666 题面 思路 首先是重要的归纳法寻求思路的思想,在满足S最小化的前提下,假设存在一种构造前k位序列B的方案,即已经构造B1B2⋯BkB_1B_2 ...

  4. 0x51.动态规划 - 线性DP(习题详解 × 10)

    目录 0x51.动态规划 - 线性DP 0x51.1 LIS问题 Problem A. 登山 (最长下降子序列) Problem B. 友好城市(思维) Problem C. 最大上升子序列和 0x5 ...

  5. UVA11584 划分成回文串 Partitioning by Palindromes(线性DP划分+DP判断回文串)

    整理的算法模板合集: ACM模板 依旧是线性DP 我们使用闫氏DP分析法 总体DP转移的时间复杂度为O(n2)O(n^2)O(n2). 但是这里牵扯到判断 i\tt ii 到 j\tt jj 是否为回 ...

  6. 洛谷P2401 不等数列(线性DP)

    本题使用的是线性DP.就是DP数组难以思考,这里我直接给出 dp[i][j]:表示 1 ~ i 这 i 个数 , 其中j 个 " < " 有几种方法 假设我们已经把 n - ...

  7. CodeForces - 1096D Easy Problem(线性dp)

    题目链接:点击查看 题目大意:给出一个字符串,每个字符都有一个权值,现在需要删除权值和最少的字符,满足字符串中不再含有子序列"hard" 题目分析:线性dp,但我不会,看着题解写的 ...

  8. CodeForces - 456C Boredom(线性dp)

    题目链接:点击查看 题目大意:给出一个由n个数字组成的数列,现在给出规则是,每次选择数列中的一种数字 x,选择后的贡献为 x,不过操作后会删除掉所有数值为 x + 1 和 x - 1 的数,现在问如何 ...

  9. POJ - 1050 To the Max(最大连续子段和,线性dp)

    题目链接:点击查看 题目大意:给出一个n*n的矩阵,每个点都有一个权值,现在要从中选取一个子矩阵要求权值和最大,问这个最大权值和是多少 题目分析:因为是要求子矩阵的权值和最大的问题,我们可以直接维护一 ...

  10. 牛客 - 「火」皇家烈焰(线性dp)

    题目链接:点击查看 题目大意:给出一个字符串表示扫雷游戏,其中: 0:这个格子没有烈焰,且其左右两个格子均没有烈焰 1:这个格子没有烈焰,且其左右两个格子中只有一个烈焰 2:这个格子没有烈焰,且其左右 ...

最新文章

  1. React Native 环境搭建步骤
  2. Boost:boost::bimaps::list_of的测试程序
  3. 数值的加减会改变python中id,在python中调用Nan值并更改为数字
  4. P4389 付公主的背包(生成函数/多项式)
  5. list排序(Collections.sort())
  6. 2017.10.7 QBXT 模拟赛
  7. 爬虫实例2 用bs4库批量爬取图片
  8. ztree 自定义参数_jQuery Ztree基本用法
  9. getch函数详解看这一篇就够了-C语言(函数功能、使用方法、返回值、头文件)
  10. android 自定义唤醒词,星星1号语音升级 中兴语音助手实现可自定义唤醒词
  11. Growing Mushrooms
  12. 关于符号Symbol第一篇
  13. Python 自动化开发【初级】到精通-张子夜-专题视频课程
  14. ariang/Aria2 RPC 服务器错误/Aria2状态/未连接
  15. HTML5+CSS3期末大作业——城市简介
  16. OPENCV+VS2008+SQLserver图片存储数据库开发
  17. 小狗AI自动建站系统
  18. 淘宝近12亿条用户信息泄露,犯罪分子获利34万
  19. enable anomaly detection to find the operation that failed to compute its gradient, with torch.autog
  20. oracle 加号和不加号,Oracle中连接与加号(+)的使用

热门文章

  1. mysql修改字段的顺序_Mysql中如何修改字段的排列顺序?
  2. python123动物重量排序_Python爬虫图片学习(一)
  3. java一个界面用另一个界面的值_如何将参数/值从一个弹出窗口传递到Angular2中的另一个弹出窗口...
  4. [数据结构-严蔚敏版]P64循环队列-队列的顺序存储结构
  5. Balanced Lineup POJ - 3264(线段树模板+查询比大小+建树)
  6. 用java做一个模拟彩票程序_JAVA模拟----- 彩票机子-----抽奖过程的实例化
  7. SQL(五) - 表的创建以及操作
  8. Java LinkedList的实现原理详解
  9. Spring Boot 2.0新特性
  10. #2989. 数列(cdq分治/曼哈顿距离)