ARC097E Sorted and Sorted
题目
There are 2N balls, N white and N black, arranged in a row. The integers from 1 through N are written on the white balls, one on each ball, and they are also written on the black balls, one on each ball. The integer written on the i-th ball from the left (1 ≤ i ≤ 2N) is ai, and the color of this ball is represented by a letter ci. ci = W
represents the ball is white; ci = B
represents the ball is black.
Takahashi the human wants to achieve the following objective:
- For every pair of integers (i,j) such that 1 ≤ i < j ≤ N, the white ball with i written on it is to the left of the white ball with j written on it.
- For every pair of integers (i,j) such that 1 ≤ i < j ≤ N, the black ball with i written on it is to the left of the black ball with j written on it.
In order to achieve this, he can perform the following operation:
- Swap two adjacent balls.
Find the minimum number of operations required to achieve the objective.
Constraints
- 1 ≤ N ≤ 2000
- 1 ≤ ai ≤ N
- ci =
W
or ci =B
. - If i ≠ j, (ai,ci) ≠ (aj,cj)
Input
Input is given from Standard Input in the following format:
N
c1 a1
c2 a2
:
c2N a2N
Output
Print the minimum number of operations required to achieve the objective.
题目大意
给出一个黑棋N个白棋N个的排列,每一种颜色的球分别标上1 - N,每次可以交换相邻两个球,求白棋相对顺序正确并且黑棋相对顺序正确,所需要最少的步数
分析
设dpij为排好白球前i个和黑球前j个所需最小步数,用a和b数组分别记录黑白球的每一数值所在位置,用c1和c2分别记录将黑白球某一数值x移到此颜色的x-1数值之后所需步数(这里的步数既有同色数目又有异色数目)。所以我们不难想出dpij由dpi-1j和dpij-1转移而来,因此得到方程式dp[i][j]=min(dp[i-1][j]+c1[i][j],dp[i][j-1]+c2[i][j])。
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<ctime>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
int dp[2100][2100],a[2100],b[2100],c1[2100][2100],c2[2100][2100];
int main(){
int n,m,i,j,k,x;
char ch;
cin>>n;
for(i=1;i<=2*n;i++){
cin>>ch>>x;
if(ch=='B'){
a[x]=i;
}else {
b[x]=i;
}
}
for(i=1;i<=n;i++){
for(j=1;j<i;j++)
if(a[i]<a[j])c1[i][0]++;
for(j=1;j<=n;j++){
c1[i][j]=c1[i][j-1];
if(b[j]>a[i])c1[i][j]++;
}
}
//c用于记录要向后走几步
for(i=1;i<=n;i++){
for(j=1;j<i;j++)
if(b[i]<b[j])c2[0][i]++;
for(j=1;j<=n;j++){
c2[j][i]=c2[j-1][i];
if(a[j]>b[i])c2[j][i]++;
}
}
int wh1=0,wh2=0;
for(i=1;i<=n;i++){
wh1+=c1[i][0];
wh2+=c2[0][i];
dp[i][0]=wh1;
dp[0][i]=wh2;
}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
dp[i][j]=min(dp[i-1][j]+c1[i][j],dp[i][j-1]+c2[i][j]);
cout<<dp[n][n]<<endl;
return 0;
}
ARC097E Sorted and Sorted的更多相关文章
- arc 097 E - Sorted and Sorted
E - Sorted and Sorted Time limit : 2sec / Memory limit : 1024MB Score : 600 points Problem Statement ...
- python中sorted和.sorted 、reversed和reverse的注意点
L=[1,2,3,4]l1=[123,123,23]if l1.sort() == L.reverse(): #这个判断式是恒等的,因为两个函数的返回值都是None(其实是无返回值) pri ...
- python中sorted和sorted 、reversed和reverse的使用。
#encoding = utf-8 list = [1,8,3,6] print(list.sort()) #None print(list) #[1,3,6,8] print(sorted(list ...
- AtCoder ARC097C Sorted and Sorted:dp
传送门 题意 有 $ 2n $ 个球排成一行,其中恰好有 $ n $ 个白球和 $ n $ 个黑球.每个球上写着数字,其中白球上的数字的并集为 $ \lbrace 1 \dots n\rbrace $ ...
- python 中 sorted() 和 list.sort() 的用法
今天用python自带的sorted对一个列表进行排序, 在这里总结一下 只要是可迭代对象都可以用sorted . sorted(itrearble, cmp=None, key=None, reve ...
- python 排序sorted
num = [3,2,4,6,5] anum = sorted(num) dnum = sorted(num,reverse=True) print '升序:',anum # 升序: [2, 3, 4 ...
- Redis in .NET Core 入门:(5) Sorted SET
第1篇:https://www.cnblogs.com/cgzl/p/10294175.html 第2篇 String:https://www.cnblogs.com/cgzl/p/10297565. ...
- Redis实战 - 2.list、set和Sorted Set
List Redis的List是通过Linked List(链表)来实现的String集合,所以插入数据的速度很快. 但是缺点就是在数据量比较大的时候,访问某个数据的时间可能会很长,但针对这种情况,可 ...
- [Swift]LeetCode768. 最多能完成排序的块 II | Max Chunks To Make Sorted II
This question is the same as "Max Chunks to Make Sorted" except the integers of the given ...
随机推荐
- sass表达式前后出现空格
最近发现一个问题,当我用mixin将px转rem时: @mixin pxToRem($remVal: 1){ font-size: ($remVal/75)rem; }.a { @include px ...
- nginx日志配置,以及日志轮询
一.为nginx配置错误日志 Nginx错误日志是调试nginx的重要手段,属于核心功能模块的参数(ngx_core_module)该参数名字为err_log,是放在Main区块中全局配置 err_l ...
- Havel-Hakimi定理 POJ1659
对于图的所有顶点,计算出每个顶点的度,度序列.给定一个序列判断序列是否可图. #include<cstdio> #include<algorithm> #include< ...
- 剑指offer之 O(1)时间删除链表结点
问题描述:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点. package Problem13; /* * 问题描述:给定单向链表的头指针和一个结点指针,定义一个函数在O(1 ...
- java深入探究01
经过前面基础部门的学习,希望大家都把基础打闹再继续深入探究java应用层面的知识,以后的日子我会继续更新java进阶知识,深入探究实际工作中的java应用,说的不好的地方还请见谅,如果能提出你宝贵的建 ...
- TortoiseGit做push时提示Disconnected: No supported authentication methods available (server sent: publickey)错误
通过Git从远程服务器上获得到自己的项目,但是通过TortoiseGit做push时提示Disconnected: No supported authentication methods availa ...
- mysql 使用过程中出现问题
1. mysql_front连接报错,sql执行错误#3167的解决方案 提示:The 'INFORMATION_SCHEMA.SESSION_VARIABLES' feature is disabl ...
- php深入浅出session
1. session概念 0 2. http协议与状态保持 0 3. 理解cookie 0 4. php中session的生成机制 2 5. php中session的过期回收机制 3 6. php中s ...
- QuickReport FastReport
一.QuickReport1.安装Component->Install packages->X:/Program Files/Borland/Delphi7/Bin/dclqrt70.bp ...
- (转)JSP九大内置对象
原文出处:http://www.importnew.com/19128.html 虽然现在基本上使用SpringMVC+AJAX进行开发了Java Web了,但是还是很有必要了解一下JSP的九大内置对 ...