题目描述

XCX最近迷上了玩蜘蛛牌。蜘蛛牌是windowsxp操作系统自带的一款纸牌游戏,游戏规则是这样的:只能将牌拖到比它大一的牌上面(A最小,K最大),如果拖动的牌上有按顺序排好的牌时,那么这些牌也跟着一起移动,游戏的目的是将所有的牌按同一花色从小到大排好。为了简单起见,我们的游戏只有同一花色的牌,但是这样XCX又觉得太简单了,于是他把牌数增加到了n(1<=n<=100),牌随机的在一行上展开,编号从1到n,把第i号上的牌移到第j号牌上,移动距离为abs(i-j),现在你要做的是求出完成游戏的最小移动距离。

输入描述

第一行T(1<=T<=1010)代表T组数据。每组数据包括两行,第一行是一个数字n,代表有n张牌,第二行有n个数字:为1…n的一种排列。

输出描述

最小移动距离

样例输入

1
10
3 10 4 2 5 9 1 8 6 7

样例输出

16

题解:

采用区间动态规划的方式,但是直接进行区间DP是没有任何意义的,因此需要对数列进行变化一下,我们进行dp的区间[a,b]定义为高度为a到高度为b的纸牌叠加到一起,所需要的最少距离和。在一开始,我们定义数组arr[x]中存储的是高度为x的纸牌所在的位置。那么状态转移就可以写成:dp[a][b] = dp[a][j] + dp[j+1][b] + abs(arr[b]-arr[j])

代码:

#include<bits/stdc++.h>
using namespace std;int a[105],n;
int dp[105][105];int main()
{int T;scanf("%d",&T);while(T--){scanf("%d",&n);for(int i=1;i<=n;i++){int x;scanf("%d",&x);a[x]=i;}for(int k=2;k<=n;k++){for(int i=1;i<=n-k+1;i++){int l=i,r=i+k-1;dp[l][r]=1e9+7;for(int j=l;j<=r-1;j++)dp[l][r]=min(dp[l][r],dp[l][j]+dp[j+1][r]+abs(a[r]-a[j]));}}printf("%d\n",dp[1][n]);}return 0;
}

北方大学 ACM 多校训练赛 第十五场 蜘蛛牌A相关推荐

  1. 北方大学 ACM 多校训练赛 第十五场 欢度6.18

    把式子变成a[i]+1 = p(a[i-1]+1)+q[a[i-2]+1],矩阵快速幂搞定.复杂度o(logn) #include <iostream> #include <cstd ...

  2. 北方大学 ACM 多校训练赛 第十五场 买花

    显然是一个比较简单的离线查询问题. 本质上是对区间求集合的问题,按照区间右端点从小到大对区间进行排序,然后用一个指针curr表示当前正在考虑区间的最右侧位置,针对排好序区间[tarl,tarr],先查 ...

  3. 北方大学 ACM 多校训练赛 第十五场 数字游戏

    本题的意思是,给你1/2,1/2,1,2,4--2^(k-1) ,让你在左边的数列中添加+号或者-号,使得最终的答案为n即可. 思路: 我们知道上面这些数直接如果全部都填+号的话,那么最终得到的数为2 ...

  4. 北方大学 ACM 多校训练赛 第四场 题解

    A. 恶魔包毁灭世界 已知一张二分图,问哪些边是二分图的可行边? 先跑最小流,再把残余网络建图,几个重要结论是: ·最小割的可行边(满流&&2点不在一个SCC中) ·最小割的必行边(可 ...

  5. 北方大学 ACM 多校训练赛 第五场(D. 节操大师 - 二分)

    Description MK和他的小伙伴们(共n人,且保证n为2的正整数幂)想要比试一下谁更有节操,于是他们组织了一场节操淘汰赛.他们的比赛规则简单而暴力:两人的节操正面相撞,碎的一方出局,而没碎的一 ...

  6. 2018牛客网暑假ACM多校训练赛(第三场)I Expected Size of Random Convex Hull 计算几何,凸包,其他...

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round3-I.html 题目传送门 - 2018牛客多校赛第三场 I ...

  7. 2018牛客网暑假ACM多校训练赛(第六场)I Team Rocket 线段树

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round6-I.html 题目传送门 - https://www.no ...

  8. UPC个人训练赛第十五场(AtCoder Grand Contest 031)

    传送门: [1]:AtCoder [2]:UPC比赛场 [3]:UPC补题场 参考资料 [1]:https://www.cnblogs.com/QLU-ACM/p/11191644.html B.Re ...

  9. 中国石油大学ACM俱乐部开放训练赛

    文章目录 中国石油大学ACM俱乐部开放训练赛 A. sciorz画画(凸多边形最优三角型剖分,区间DP) B. 奎奎发红包(贪心) C. 关于我转生变成史莱姆这档事(DFS) F. 求和(矩阵构造+矩 ...

最新文章

  1. linux mysql 1030,MySQL报错ERROR 1030 (HY000): 解决过程
  2. Cascade R-CNN的一些记录
  3. STL 容器 与 数据结构
  4. Class? getClass()
  5. php redis 删除元素,redisTemplate.delete()不能删除元素
  6. Matlab定义符号函数(ZZ)
  7. 程序设计 关键字解释
  8. QCon全球软件开发大会:推动创新,实现技术落地
  9. js JQuery 获取元素和遍历
  10. CentOS TinyProxy http(s)上网代理及置代理上网的方法
  11. MapReduce中的排序和分组
  12. 【0513】数字签名
  13. 《论语》中关于“忧虑”的人生启示
  14. atoi()函数的实现
  15. c35是什么意思_混凝土c25、c30、c35分别代表什么意思?
  16. php buildtrees,thinkphp5带分组功能的树形结构的无限级分类节点展示
  17. 【面试题解】详解前端基石-CSS选择器
  18. 软银集团董事长兼总裁孙正义演讲
  19. 怎样用计算机做初中物理实验,初中物理实验软件
  20. 计算机基础原理习题,《计算机基础教学资料》第1章计算机基础原理习题.doc

热门文章

  1. python没有菜单栏怎么搞mac_Mac 下 sublime 怎么调出顶端菜单栏
  2. anjularjs ajax 调用,AngularJS AJAX调用的服务(AngularJS Ajax Call in Service
  3. leetcode53. 最大子数组和(动态规划)
  4. [PAT乙级]1010 一元多项式求导
  5. [C++STL]C++ 实现map容器和set容器
  6. [剑指offer]面试题19:二叉树的镜像
  7. 图的最小生成树和最短路径算法思路总结(Prim,Kruskal,Dijkstra,Floyd)
  8. [蓝桥杯2018初赛]递增三元组-双指针,枚举,排序,前缀和
  9. 蓝桥杯2017初赛-9数算式-dfs
  10. 斐波那契数列及其优化