BZOJ 1831 & 就是一个DP....
题意:
比如说,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:
- /*==========================================================================
- # Last modified: 2016-03-16 20:57
- # Filename: 2190.cpp
- # Description:
- ==========================================================================*/
- #define me AcrossTheSky
- #include <cstdio>
- #include <cmath>
- #include <ctime>
- #include <string>
- #include <cstring>
- #include <cstdlib>
- #include <iostream>
- #include <algorithm>
- #include <set>
- #include <map>
- #include <stack>
- #include <queue>
- #include <vector>
- #define lowbit(x) (x)&(-x)
- #define FOR(i,a,b) for((i)=(a);(i)<=(b);(i)++)
- #define FORP(i,a,b) for(int i=(a);i<=(b);i++)
- #define FORM(i,a,b) for(int i=(a);i>=(b);i--)
- #define ls(a,b) (((a)+(b)) << 1)
- #define rs(a,b) (((a)+(b)) >> 1)
- #define getlc(a) ch[(a)][0]
- #define getrc(a) ch[(a)][1]
- #define maxn 100000
- #define maxm 100000
- #define pi 3.1415926535898
- #define _e 2.718281828459
- #define INF 1070000000
- using namespace std;
- typedef long long ll;
- typedef unsigned long long ull;
- template<class T> inline
- void read(T& num) {
- bool start=false,neg=false;
- char c;
- num=0;
- while((c=getchar())!=EOF) {
- if(c=='-') start=neg=true;
- else if(c>='0' && c<='9') {
- start=true;
- num=num*10+c-'0';
- } else if(start) break;
- }
- if(neg) num=-num;
- }
- /*==================split line==================*/
- int a[10005],pos[10005];
- int small[10005][105],big[10005][105],dp[10005][105];
- int main(){
- int n,k,cnt=0;
- memset(big,0,sizeof(big));
- memset(small,0,sizeof(small));
- memset(dp,0x7f,sizeof(dp));
- int ans=INF;
- read(n); read(k);
- FORP(i,1,n){
- read(a[i]);
- if(a[i]==-1) pos[++cnt]=i;
- }
- FORP(i,2,n){
- FORP(j,1,k){
- big[i][j]=big[i-1][j];
- if(a[i-1]>j) big[i][j]++;
- }
- }
- FORM(i,n-1,1){
- FORP(j,1,k){
- small[i][j]=small[i+1][j];
- if(a[i+1]<j && a[i+1]!=-1) small[i][j]++;
- }
- }
- int num=0;
- FORP(i,1,n) num+=big[i][a[i]];
- FORP(i,1,k) dp[1][i]=big[pos[1]][i]+small[pos[1]][i];
- FORP(i,2,cnt)
- FORP(j,1,k)
- FORP(p,1,j)dp[i][j]=min(dp[i][j],dp[i-1][p]+big[pos[i]][j]+small[pos[i]][j]);
- FORP(i,1,k) ans=min(ans,dp[cnt][i]);
- ans=(ans==INF)?0:ans;
- printf("%d\n",ans+num);
- return 0;
- }
BZOJ 1831 & 就是一个DP....的更多相关文章
- BZOJ 1831 逆序对
Description 小可可和小卡卡想到Y岛上旅游,但是他们不知道Y岛有多远.好在,他们找到一本古老的书,上面是这样说的: 下面是N个正整数,每个都在\(1 \sim K\)之间.如果有两个数\(A ...
- [BZOJ 3791] 作业 【DP】
题目链接:BZOJ - 3791 题目分析 一个性质:将一个序列染色 k 次,每次染连续的一段,最多将序列染成 2k-1 段不同的颜色. 那么就可以 DP 了,f[i][j][0|1] 表示到第 i ...
- [BZOJ 2165] 大楼 【DP + 倍增 + 二进制】
题目链接:BZOJ - 2165 题目分析: 这道题我读了题之后就想不出来怎么做,题解也找不到,于是就请教了黄学长,黄学长立刻秒掉了这道题,然后我再看他的题解才写出来..Orz 使用 DP + 倍增 ...
- BZOJ.3425.[POI2013]Polarization(DP 多重背包 二进制优化)
BZOJ 洛谷 最小可到达点对数自然是把一条路径上的边不断反向,也就是黑白染色后都由黑点指向白点.这样答案就是\(n-1\). 最大可到达点对数,容易想到找一个点\(a\),然后将其子树分为两部分\( ...
- BZOJ 4380 [POI2015]Myjnie | DP
链接 BZOJ 4380 题面 有n家洗车店从左往右排成一排,每家店都有一个正整数价格p[i]. 有m个人要来消费,第i个人会驶过第a[i]个开始一直到第b[i]个洗车店,且会选择这些店中最便宜的一个 ...
- 【BZOJ 3090】 树形DP
3090: Coci2009 [podjela] Description 有 N 个农民, 他们住在 N 个不同的村子里. 这 N 个村子形成一棵树.每个农民初始时获得 X 的钱.每一次操作, 一个农 ...
- BZOJ 4318: OSU! 期望DP
4318: OSU! 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4318 Description osu 是一款群众喜闻乐见的休闲软件 ...
- bzoj 1133: [POI2009]Kon dp
1133: [POI2009]Kon Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 242 Solved: 81[Submit][Status][D ...
- bzoj 1068: [SCOI2007]压缩 DP
1068: [SCOI2007]压缩 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 496 Solved: 315[Submit][Status] D ...
随机推荐
- jq 轮播图
<style> #focus{width:500px;height:200px;overflow:hidden;/*用一个div把图片包含设置超出范围隐藏*/} </style> ...
- javascript - 浏览器对象
Navigator对象 弹出窗口 Cookies Browser Objects 参考手册 参考手册描述了每个对象的属性和方法,并提供了在线实例. Window 对象 Navigator 对象 Scr ...
- Delphi之DLL知识学习3---为什么要使用DLL
使用DLL有若干理由,其中有一些前面提到过的.大体说来,使用动态链接库可以共享代码.系统资源,可以隐藏实现的代码或底层的系统例程.设计自定义控件 一.共享代码.资源和数据 前面已经提到,共享代码是创建 ...
- Shell编程基础教程4--控制流结构
4.控制流结构 4.1.控制结构 4.2.if then else语句 格式: if 条件1 //如果条件1为真 then 命令1 //那么,执行命令1 el ...
- CSS中设置DIV垂直居中的N种方法 兼容IE浏览器
在说到这个问题的时候,也许有人会问CSS中不是有vertical-align属性来设置垂直居中的吗?即使是某些浏览器不支持我只需做少许的CSS Hack技术就可以啊!所以在这里我还要啰嗦两句,CSS中 ...
- Oracle11g在使用exp导出时不导出空表问题的解决办法
11G中有个新特性,当表无数据时,不分配segment,以节省空间 解决方法: 1.insert一行,再rollback就产生segment了. 该方法是在在空表中插入数据,再删除,则产生segmen ...
- Windows下Apache服务器中自动配置二级子域名
今天我们介绍的这个办法,只需要简单修改 httpd-vhosts.conf 文件,配合 .htaccess 文件即可实现自动配置二级域名. 我们这里以 wpchina.com 为例,以下代码中的 wp ...
- [Unity3d插件]EasyTouch的初步使用
对于移动平台上的RPG类的游戏,我们常用虚拟摇杆来控制人物角色的行走和一些行为,相信我们对它并不陌生,之前尝试了EasyTouch2.5,发现并没有最新版的3.1好用,2.5版本的对于自适应没有做的很 ...
- Unity3D打Box游戏
先学习一些基本的脚本实现: 1.动态创建物体.默认位置是(0,0)位置 GameObject goNew = GameObject.CreatePrimitive(PrimitiveType.Cube ...
- Atom 和 markdown 基本使用
Atom 和 markdown 基本使用 Atom 常用的快捷键 Cmd + Shift + P 打开命令窗口,可以运行各种菜单功能. Cmd + T 快速的多文件切换 Ctrl + G 文件内跳转到 ...