题意:

  比如说,4 2 1 3 3里面包含了5个逆序对:(4, 2), (4, 1), (4, 3), (4, 3), (2, 1)。 可惜的是,由于年代久远,这些数字里有一部分已经模糊不清了,为了方便记录,小可可用“-1”表示它们。比如说,4 2 -1 -1 3 可能原来是4 2 1 3 3,也可能是4 2 4 4 3,也可能是别的样子。 能不能推断出这些数字里最少能有多少个逆序对

SOL:

  一眼就觉得显然填的数字单调不降...也不想去证明了,感觉很对的样子就不想那么多...

  但是DP的实现上还是弱的一笔啊...最弱的就是DP了..唉...本来还想维护两棵线段树加加减减...

  被数据结构洗脑了...然而只要暴力维护就好了...日...

  双倍经验很开心

Code:

  

  1. /*==========================================================================
  2. # Last modified: 2016-03-16 20:57
  3. # Filename: 2190.cpp
  4. # Description:
  5. ==========================================================================*/
  6. #define me AcrossTheSky
  7. #include <cstdio>
  8. #include <cmath>
  9. #include <ctime>
  10. #include <string>
  11. #include <cstring>
  12. #include <cstdlib>
  13. #include <iostream>
  14. #include <algorithm>
  15.  
  16. #include <set>
  17. #include <map>
  18. #include <stack>
  19. #include <queue>
  20. #include <vector>
  21.  
  22. #define lowbit(x) (x)&(-x)
  23. #define FOR(i,a,b) for((i)=(a);(i)<=(b);(i)++)
  24. #define FORP(i,a,b) for(int i=(a);i<=(b);i++)
  25. #define FORM(i,a,b) for(int i=(a);i>=(b);i--)
  26. #define ls(a,b) (((a)+(b)) << 1)
  27. #define rs(a,b) (((a)+(b)) >> 1)
  28. #define getlc(a) ch[(a)][0]
  29. #define getrc(a) ch[(a)][1]
  30.  
  31. #define maxn 100000
  32. #define maxm 100000
  33. #define pi 3.1415926535898
  34. #define _e 2.718281828459
  35. #define INF 1070000000
  36. using namespace std;
  37. typedef long long ll;
  38. typedef unsigned long long ull;
  39.  
  40. template<class T> inline
  41. void read(T& num) {
  42. bool start=false,neg=false;
  43. char c;
  44. num=0;
  45. while((c=getchar())!=EOF) {
  46. if(c=='-') start=neg=true;
  47. else if(c>='0' && c<='9') {
  48. start=true;
  49. num=num*10+c-'0';
  50. } else if(start) break;
  51. }
  52. if(neg) num=-num;
  53. }
  54. /*==================split line==================*/
  55. int a[10005],pos[10005];
  56. int small[10005][105],big[10005][105],dp[10005][105];
  57. int main(){
  58. int n,k,cnt=0;
  59. memset(big,0,sizeof(big));
  60. memset(small,0,sizeof(small));
  61. memset(dp,0x7f,sizeof(dp));
  62. int ans=INF;
  63. read(n); read(k);
  64. FORP(i,1,n){
  65. read(a[i]);
  66. if(a[i]==-1) pos[++cnt]=i;
  67. }
  68. FORP(i,2,n){
  69. FORP(j,1,k){
  70. big[i][j]=big[i-1][j];
  71. if(a[i-1]>j) big[i][j]++;
  72. }
  73. }
  74. FORM(i,n-1,1){
  75. FORP(j,1,k){
  76. small[i][j]=small[i+1][j];
  77. if(a[i+1]<j && a[i+1]!=-1) small[i][j]++;
  78. }
  79. }
  80. int num=0;
  81. FORP(i,1,n) num+=big[i][a[i]];
  82. FORP(i,1,k) dp[1][i]=big[pos[1]][i]+small[pos[1]][i];
  83. FORP(i,2,cnt)
  84. FORP(j,1,k)
  85. FORP(p,1,j)dp[i][j]=min(dp[i][j],dp[i-1][p]+big[pos[i]][j]+small[pos[i]][j]);
  86. FORP(i,1,k) ans=min(ans,dp[cnt][i]);
  87. ans=(ans==INF)?0:ans;
  88. printf("%d\n",ans+num);
  89. return 0;
  90. }

BZOJ 1831 & 就是一个DP....的更多相关文章

  1. BZOJ 1831 逆序对

    Description 小可可和小卡卡想到Y岛上旅游,但是他们不知道Y岛有多远.好在,他们找到一本古老的书,上面是这样说的: 下面是N个正整数,每个都在\(1 \sim K\)之间.如果有两个数\(A ...

  2. [BZOJ 3791] 作业 【DP】

    题目链接:BZOJ - 3791 题目分析 一个性质:将一个序列染色 k 次,每次染连续的一段,最多将序列染成 2k-1 段不同的颜色. 那么就可以 DP 了,f[i][j][0|1] 表示到第 i ...

  3. [BZOJ 2165] 大楼 【DP + 倍增 + 二进制】

    题目链接:BZOJ - 2165 题目分析: 这道题我读了题之后就想不出来怎么做,题解也找不到,于是就请教了黄学长,黄学长立刻秒掉了这道题,然后我再看他的题解才写出来..Orz 使用 DP + 倍增 ...

  4. BZOJ.3425.[POI2013]Polarization(DP 多重背包 二进制优化)

    BZOJ 洛谷 最小可到达点对数自然是把一条路径上的边不断反向,也就是黑白染色后都由黑点指向白点.这样答案就是\(n-1\). 最大可到达点对数,容易想到找一个点\(a\),然后将其子树分为两部分\( ...

  5. BZOJ 4380 [POI2015]Myjnie | DP

    链接 BZOJ 4380 题面 有n家洗车店从左往右排成一排,每家店都有一个正整数价格p[i]. 有m个人要来消费,第i个人会驶过第a[i]个开始一直到第b[i]个洗车店,且会选择这些店中最便宜的一个 ...

  6. 【BZOJ 3090】 树形DP

    3090: Coci2009 [podjela] Description 有 N 个农民, 他们住在 N 个不同的村子里. 这 N 个村子形成一棵树.每个农民初始时获得 X 的钱.每一次操作, 一个农 ...

  7. BZOJ 4318: OSU! 期望DP

    4318: OSU! 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4318 Description osu 是一款群众喜闻乐见的休闲软件 ...

  8. bzoj 1133: [POI2009]Kon dp

    1133: [POI2009]Kon Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 242  Solved: 81[Submit][Status][D ...

  9. bzoj 1068: [SCOI2007]压缩 DP

    1068: [SCOI2007]压缩 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 496  Solved: 315[Submit][Status] D ...

随机推荐

  1. jq 轮播图

    <style> #focus{width:500px;height:200px;overflow:hidden;/*用一个div把图片包含设置超出范围隐藏*/} </style> ...

  2. javascript - 浏览器对象

    Navigator对象 弹出窗口 Cookies Browser Objects 参考手册 参考手册描述了每个对象的属性和方法,并提供了在线实例. Window 对象 Navigator 对象 Scr ...

  3. Delphi之DLL知识学习3---为什么要使用DLL

    使用DLL有若干理由,其中有一些前面提到过的.大体说来,使用动态链接库可以共享代码.系统资源,可以隐藏实现的代码或底层的系统例程.设计自定义控件 一.共享代码.资源和数据 前面已经提到,共享代码是创建 ...

  4. Shell编程基础教程4--控制流结构

    4.控制流结构    4.1.控制结构            4.2.if then else语句        格式: if 条件1 //如果条件1为真 then 命令1 //那么,执行命令1 el ...

  5. CSS中设置DIV垂直居中的N种方法 兼容IE浏览器

    在说到这个问题的时候,也许有人会问CSS中不是有vertical-align属性来设置垂直居中的吗?即使是某些浏览器不支持我只需做少许的CSS Hack技术就可以啊!所以在这里我还要啰嗦两句,CSS中 ...

  6. Oracle11g在使用exp导出时不导出空表问题的解决办法

    11G中有个新特性,当表无数据时,不分配segment,以节省空间 解决方法: 1.insert一行,再rollback就产生segment了. 该方法是在在空表中插入数据,再删除,则产生segmen ...

  7. Windows下Apache服务器中自动配置二级子域名

    今天我们介绍的这个办法,只需要简单修改 httpd-vhosts.conf 文件,配合 .htaccess 文件即可实现自动配置二级域名. 我们这里以 wpchina.com 为例,以下代码中的 wp ...

  8. [Unity3d插件]EasyTouch的初步使用

    对于移动平台上的RPG类的游戏,我们常用虚拟摇杆来控制人物角色的行走和一些行为,相信我们对它并不陌生,之前尝试了EasyTouch2.5,发现并没有最新版的3.1好用,2.5版本的对于自适应没有做的很 ...

  9. Unity3D打Box游戏

    先学习一些基本的脚本实现: 1.动态创建物体.默认位置是(0,0)位置 GameObject goNew = GameObject.CreatePrimitive(PrimitiveType.Cube ...

  10. Atom 和 markdown 基本使用

    Atom 和 markdown 基本使用 Atom 常用的快捷键 Cmd + Shift + P 打开命令窗口,可以运行各种菜单功能. Cmd + T 快速的多文件切换 Ctrl + G 文件内跳转到 ...