2015北京网络赛 G题 Boxes bfs
Boxes
Time Limit: 1 Sec
Memory Limit: 256 MB
题目连接
http://hihocoder.com/contest/acmicpc2015beijingonline/problem/7
Description
There is a strange storehouse in PKU. In this storehouse there are n slots for boxes, forming a line. In each slot you can pile up any amount of boxes. The limitation is that you can only pile a smaller one above a bigger one, in order to keep balance. The slots are numbered from 1 to n. The leftmost one is slot 1.
At first there is exactly one box in each slot. The volume of the box in slot i is vi. As a virgo, you decide to sort these boxes by moving some of them. In each move you can choose a slot and move the top box in this slot to an adjacent slot (of course you can only put it on the top). You should ensure that the limitation mentioned above is still satisfied after this move. After the sort operation, there should be exactly one box in each slot, and for each pair of adjacent slots, the box in the left one should be smaller than the box in the right one.
Your task is to calculate the minimum number of moves you need to sort the boxes.
Input
In the first line there’s an integer T(T≤6000), indicating the number of test cases. The following 2T lines describe the test cases.
In each test case, the first line contains an integer n, indicating the number of slots. The second line contains n integers v1,v2…vn, indicating the volume of the boxes. It is guaranteed that all vi in a test case are different.
Please note that n<8,0≤vi≤104
Output
For each test case, print a line containing one integer indicating the answer. If there are infinity common points, print -1.
Sample Input
4
3
2 1 3
2
7 8
2
10000 1000
3
97 96 95
Sample Output
4
0
-1
20
HINT
题意
给你一堆盒子,每个盒子只能仍在旁边比他大的上面,你每次只能操作当前位置最小的一个
然后问你最少多少次,可以使得盒子摆放有序
题解:
bfs爆搜……
恶心题,太麻烦了= =
@)1%KBO0HM418$J94$1R.jpg)
代码:
//qscqesze
#include <cstdio>
#include <cmath>
#include <cstring>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <sstream>
#include <queue>
#include <typeinfo>
#include <fstream>
#include <map>
#include <stack>
typedef long long ll;
using namespace std;
//freopen("D.in","r",stdin);
//freopen("D.out","w",stdout);
#define sspeed ios_base::sync_with_stdio(0);cin.tie(0)
#define maxn 2000000 + 500
#define mod 10007
#define eps 1e-9
int Num;
char CH[];
//const int inf=0x7fffffff; //нчоч╢С
const int inf=0x3f3f3f3f;
//************************************************************************************** int dp7[][][][][][][];
int vis7[][][][][][][];
int dp6[][][][][][];
int vis6[][][][][][];
int dp5[][][][][];
int vis5[][][][][];
int dp4[][][][];
int vis4[][][][];
int dp3[][][];
int vis3[][][];
int dp2[][];
int vis2[][];
int dp1[];
int vis1[];
map<int,int> H;
int a[];
int b[];
int vvv[];
struct node
{
int a[];
int step;
};
int check(int a[],int num,int step)
{
if(num==)
{
if(vis7[a[]][a[]][a[]][a[]][a[]][a[]][a[]])
return ;
dp7[a[]][a[]][a[]][a[]][a[]][a[]][a[]]=step;
vis7[a[]][a[]][a[]][a[]][a[]][a[]][a[]] = ;
return ;
}
if(num==)
{
if(vis6[a[]][a[]][a[]][a[]][a[]][a[]])
return ;
dp6[a[]][a[]][a[]][a[]][a[]][a[]]=step;
vis6[a[]][a[]][a[]][a[]][a[]][a[]]= ;
return ;
}
if(num==)
{
if(vis5[a[]][a[]][a[]][a[]][a[]])
return ;
dp5[a[]][a[]][a[]][a[]][a[]]=step;
vis5[a[]][a[]][a[]][a[]][a[]]= ;
return ;
}
if(num==)
{
if(vis4[a[]][a[]][a[]][a[]])
return ;
dp4[a[]][a[]][a[]][a[]]=step;
vis4[a[]][a[]][a[]][a[]]= ;
return ;
}
if(num==)
{
if(vis3[a[]][a[]][a[]])
return ;
dp3[a[]][a[]][a[]]=step;
vis3[a[]][a[]][a[]]= ;
return ;
}
if(num==)
{
if(vis2[a[]][a[]])
return ;
dp2[a[]][a[]]=step;
vis2[a[]][a[]]= ;
return ;
}
if(num==)
{
if(vis1[a[]])
return ;
dp1[a[]]=step;
vis1[a[]]= ;
return ;
}
return ;
}
void solve(int ccc[],int step,int num)
{
node p;
for(int i=;i<num;i++)
p.a[i]=ccc[i];
int a[];
check(ccc,num,);
queue<node> Q;
p.step = ;
Q.push(p);
while(!Q.empty())
{
node k = Q.front();
Q.pop();
for(int i=;i<num;i++)
a[i]=k.a[i];
for(int i=;i<num;i++)
{
int temp = a[i];
int l = a[i]-,r = a[i]+;
if(l<)l=-;
if(r>=num)r=-;
for(int j=;j<i;j++)
{
if(a[j]==a[i])
{
l = -;
r = -;
}
}
for(int j=;j<i;j++)
if(a[j]==a[i]-)
l = -;
for(int j=;j<i;j++)
if(a[j]==a[i]+)
r = -;
if(l!=-)
{
a[i]=l;
for(int i=;i<num;i++)
p.a[i]=a[i];
p.step = k.step + ;
if(check(a,num,p.step))
Q.push(p);
a[i]=temp;
}
if(r!=-)
{
a[i]=r;
for(int i=;i<num;i++)
p.a[i]=a[i];
p.step = k.step + ;
if(check(a,num,p.step))
Q.push(p);
a[i]=temp;
}
}
}
} int main()
{
int t;scanf("%d",&t);
int c[];
memset(dp7,-,sizeof(dp7));
memset(dp6,-,sizeof(dp6));
memset(dp5,-,sizeof(dp5));
memset(dp4,-,sizeof(dp4));
memset(dp3,-,sizeof(dp3));
memset(dp2,-,sizeof(dp2));
memset(dp1,-,sizeof(dp1));
for(int i=;i<;i++)
c[i]=i;
for(int i=;i<;i++)
solve(c,,i+);
while(t--)
{
H.clear();
vector<int> Q;
int n;scanf("%d",&n);
for(int i=;i<n;i++)
{scanf("%d",&a[i]);Q.push_back(a[i]);}
sort(Q.begin(),Q.end());
for(int i=;i<Q.size();i++)
H[Q[i]]=i;
for(int i=;i<n;i++)
b[H[a[i]]]=i;
if(n==)
{
if(b[]==)
printf("0\n");
else
printf("%d\n",dp1[b[]]);
}
if(n==)
{
if(b[]==&&b[]==)
printf("0\n");
else
printf("%d\n",dp2[b[]][b[]]);
}
if(n==)
{
if(b[]==&&b[]==&&b[]==)
printf("0\n");
else
printf("%d\n",dp3[b[]][b[]][b[]]);
}
if(n==)
{
if(b[]==&&b[]==&&b[]==&&b[]==)
printf("0\n");
else
printf("%d\n",dp4[b[]][b[]][b[]][b[]]);
}
if(n==)
{
if(b[]==&&b[]==&&b[]==&&b[]==&&b[]==)
printf("0\n");
else
printf("%d\n",dp5[b[]][b[]][b[]][b[]][b[]]);
}
if(n==)
{
if(b[]==&&b[]==&&b[]==&&b[]==&&b[]==&&b[]==)
printf("0\n");
else
printf("%d\n",dp6[b[]][b[]][b[]][b[]][b[]][b[]]);
}
if(n==)
{
if(b[]==&&b[]==&&b[]==&&b[]==&&b[]==&&b[]==&&b[]==)
printf("0\n");
else
printf("%d\n",dp7[b[]][b[]][b[]][b[]][b[]][b[]][b[]]);
} }
}
2015北京网络赛 G题 Boxes bfs的更多相关文章
- 2015北京网络赛 G Boxes BFS+打表
G Boxes 题意:n个位置摆有n个箱子,每次移动只能把相邻的垒起来,且上面的必须小于下面的.求摆成升序需要移动多少步. 思路:这里的n很小,只有7.但是bfs最快的情况需要2s左右,所以就打表了. ...
- 2015北京网络赛 H题 Fractal 找规律
Fractal Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://hihocoder.com/contest/acmicpc2015beijingo ...
- hihocoder 1236(2015北京网络赛 J题) 分块bitset乱搞题
题目大意: 每个人有五门课成绩,初始给定一部分学生的成绩,然后每次询问给出一个学生的成绩,希望知道在给定的一堆学生的成绩比这个学生每门都低或者相等的人数 因为强行要求在线查询,所以题目要求,每次当前给 ...
- 2015北京网络赛B题 Mission Impossible 6
借用大牛的一张图片:模拟 #include<cstdio> #include<cmath> #include<cstring> #include<algori ...
- 2015北京网络赛A题The Cats' Feeding Spots
题意:给你一百个点,找个以这些点为中心的最小的圆,使得这个圆恰好包含了n个点,而且这个圆的边界上并没有点 解题思路:暴力枚举每个点,求出每个点到其他点的距离,取第n大的点,判断一下. #include ...
- 2015北京网络赛 A题 The Cats' Feeding Spots 暴力
The Cats' Feeding Spots Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://hihocoder.com/contest/acm ...
- 2015北京网络赛 Couple Trees 倍增算法
2015北京网络赛 Couple Trees 题意:两棵树,求不同树上两个节点的最近公共祖先 思路:比赛时看过的队伍不是很多,没有仔细想.今天补题才发现有个 倍增算法,自己竟然不知道. 解法来自 q ...
- 2015北京网络赛 D-The Celebration of Rabbits 动归+FWT
2015北京网络赛 D-The Celebration of Rabbits 题意: 给定四个正整数n, m, L, R (1≤n,m,L,R≤1000). 设a为一个长度为2n+1的序列. 设f(x ...
- 2015北京网络赛 J Scores bitset+分块
2015北京网络赛 J Scores 题意:50000组5维数据,50000个询问,问有多少组每一维都不大于询问的数据 思路:赛时没有思路,后来看解题报告也因为智商太低看了半天看不懂.bitset之前 ...
随机推荐
- vsphere client cd/dvd 驱动器1 正在连接
esxi 5.1选择了客户端设备,打开控制台后,CD/DVD一直显示“CD/DVD驱动器1 正在连接” 解决方法:vSphere Client客户端问题,关闭和重新打开vSphere Client客户 ...
- Hadoop课程介绍
一.课程简介 1. Hadoop是什么? Apache Hadoop是一款支持数据密集型分布式应用并以Apache 2.0许可协议发布的开源软件框架.它支持在商品硬件构建的大型集群上运行的应用程序.H ...
- poj 2195 Going Home(最小费用最大流)
题目:http://poj.org/problem?id=2195 有若干个人和若干个房子在一个给定网格中,每人走一个都要一定花费,每个房子只能容纳一人,现要求让所有人进入房子,且总花费最小. 构造一 ...
- jwplayer 网页在线播放插件
1.到官网 https://www.jwplayer.com/ 注册,取得key并下载免费版本(免费版只支持mp4格式): 2.编辑如下网页即可在线播放: <!DOCTYPE html> ...
- (三)学习CSS之opacity 属性
参考:http://www.w3school.com.cn/cssref/pr_opacity.asp opacity 属性设置元素的不透明级别. 所有浏览器都支持 opacity 属性. 注释:IE ...
- JPA简单知识
,JPA(Java Persistence API):通过注解或XML描述对象--关系表的映射关系,并将运行期的实体对象持久化到数据库中. JPA是一套规范,不是某个ORM产品,它主要包括以下3方面的 ...
- 【译】 AWK教程指南 1前言
前面的话: 这几天写了一个程序,在同一个目录里生成了很多文件,需要统计其中部分文件的总大小,发现经常用到的ls.du等命令都无济于事,我甚至都想到了最笨的方法,写一个脚本:mkdir一个新目录,把要统 ...
- 【暑假】[实用数据结构]UVAlive 4329 Ping pong
UVAlive 4329 Ping pong 题目: Ping pong Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: % ...
- Apache下安装配置mod_pagespeed模块,轻松完成网站提速
mod_pagespeed是一个开源的Apache module,它由谷歌开发,通过优化你的网页来减少响应延迟和带宽占用.作用参考ngx_pagespeed功能:http://blog.linuxey ...
- android开发中遇到的问题
7.ExpandableListView setOnChildClickListener无效,请在adapter的方法isChildSelectable返回true即可 6.使用<shape/& ...