Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u

Submit Status

Description

The famous ACM (Advanced Computer Maker) Company has rented a floor of a building whose shape is in the following figure. 








The floor has 200 rooms each on the north side and south side along the corridor. Recently the Company made a plan to reform its system. The reform includes moving a lot of tables between rooms. Because the corridor is narrow and all the tables are big, only
one table can pass through the corridor. Some plan is needed to make the moving efficient. The manager figured out the following plan: Moving a table from a room to another room can be done within 10 minutes. When moving a table from room i to room j, the
part of the corridor between the front of room i and the front of room j is used. So, during each 10 minutes, several moving between two rooms not sharing the same part of the corridor will be done simultaneously. To make it clear the manager illustrated the
possible cases and impossible cases of simultaneous moving. 








For each room, at most one table will be either moved in or moved out. Now, the manager seeks out a method to minimize the time to move all the tables. Your job is to write a program to solve the manager’s problem. 
 

Input

The input consists of T test cases. The number of test cases ) (T is given in the first line of the input. Each test case begins with a line containing an integer N , 1<=N<=200 , that represents the number of tables to move. Each
of the following N lines contains two positive integers s and t, representing that a table is to move from room number s to room number t (each room number appears at most once in the N lines). From the N+3-rd line, the remaining test cases are listed in the
same manner as above. 
 

Output

The output should contain the minimum time in minutes to complete the moving, one per line. 
 

Sample Input

3
4
10 20
30 40
50 60
70 80
2
1 3
2 200
3
10 100
20 80
30 50
 

Sample Output

10
20
30
 第一种方法,很明了
对这道题目,核心算法就是贪心了。从最小的房号開始搬运。然后将不冲突的都搬走就能够了

接着就是相邻的两个房间进行特殊处理。假设是5号房间,那么6号房间的走廊就不能用。为什么。请

看题目提供的图。所以接下来就处理过去就能够了,知道没有房间能够搬。
/*
Author: 2486
Memory: 1416 KB Time: 0 MS
Language: G++ Result: Accepted
VJ RunId: 4178448 Real RunId: 14210276
*/
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=200+5;
int t,n;
struct obje {
int s,t;
bool operator<(const obje&a)const {
return s<a.s;
}
} objes[maxn];
bool vis[maxn];
int main() {
// freopen("D://imput.txt","r",stdin);
scanf("%d",&t);
while(t--) {
scanf("%d",&n);
for(int i=0; i<n; i++) {
scanf("%d%d",&objes[i].s,&objes[i].t);
if(objes[i].s>objes[i].t)swap(objes[i].s,objes[i].t);
vis[i]=false;
}
sort(objes,objes+n);//按房号開始排序
int cnt=0;
bool flag=false;
while(true) {
int t=0;
flag=false;
for(int i=0; i<n; i++) {
if(vis[i])continue;
if((t%2==1&&t+1<objes[i].s)||(t%2==0&&t<objes[i].s)) {//相邻的房间处理,以及选取末尾比t大的房号
flag=true;
vis[i]=true;
t=objes[i].t;
}
}
if(!flag)break;
else cnt++;
}
printf("%d\n",cnt*10);
}
return 0;
}

第二种方法就是区间覆盖的方法。属于区间覆盖类型题,对于每一回合操作中记录当前覆盖的最大的值,证明这些覆盖的部分肯定不可以同一时候进行搬运,如此这里还须要一个技巧,就是将5,6或者3,4变为一个数,由于他们拥有相同的走廊。将6当做5处理。和把5当做6处理。他们都是占用同一走廊,所得到的效果是一样的

于是
/*
Author: 2486
Memory: 1408 KB Time: 0 MS
Language: G++ Result: Accepted
*/
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=200+5;
int t,n,s,tt;
int a[maxn];
int main() {
//freopen("D://imput.txt","r",stdin);
scanf("%d",&t);
while(t--) {
memset(a,0,sizeof(a));
scanf("%d",&n);
int cnt=0;
while(n--){
scanf("%d%d",&s,&tt);
if(s>tt)swap(s,tt);
s=(s+1)>>1;//将他们5,6缩到一起。区间降低一半
tt=(tt+1)>>1;
for(int i=s;i<=tt;i++){
a[i]++;
if(a[i]>cnt)cnt=a[i];//求每一回合,区间的最大覆盖值就可以
}
}
printf("%d\n",cnt*10);
}
return 0;
}

Moving Tables-贪心的更多相关文章

  1. Moving Tables(贪心或Dp POJ1083)

    Moving Tables Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 28304   Accepted: 9446 De ...

  2. zstu.2512. Moving Tables(贪心)

     Moving Tables Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 1182  Solved: 563 Description The famo ...

  3. HDU1050(Moving Tables:贪心算法)

    解题思路: 这种做法是基于hdu2037的做法上考虑的,找出所有可以同时搬运的桌子,然后就很方便求出最短总时间. 还有一种更简单的做法是直接遍历一遍找出与别的重复次数最多的那片区域,重复次数*10就可 ...

  4. hdu_1050 Moving Tables 贪心

    Moving Tables Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  5. UVAlive 2326 Moving Tables(贪心 + 区间问题)

    The famous ACM (Advanced Computer Maker) Company has rented a floor of a building whose shape is in ...

  6. --hdu 1050 Moving Tables(贪心)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1050 AC code: #include<stdio.h> #include<str ...

  7. POJ 1083 &amp;&amp; HDU 1050 Moving Tables (贪心)

    Moving Tables Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  8. hdoj 1050 Moving Tables【贪心区间覆盖】

    Moving Tables Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  9. HDOJ 1050 Moving Tables

    Moving Tables Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  10. Moving Tables

    Moving Tables Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total ...

随机推荐

  1. COCOS2D - JS 之JSON 解析

    list 类型的json数据  var source = ["10004","1234","4","3","1 ...

  2. 2017CCPC 杭州 J. Master of GCD【差分标记/线段树/GCD】

    给你一个n个初始元素都为1的序列和m个询问q. 询问格式为:l r x(x为2or3) 最后求1~n所有数的GCD GCD:把每个数分别分解质因数,再把各数中的全部公有质因数提取出来连乘,所得的积就是 ...

  3. logging模块介绍

    在我们的实际开发过程中,我们有时候需要记录一些重要操作,或者程序运行情况,我们就需要在程序里面写入日志,来达到更快的排错跟记录重要操作的目的.在Python中logging模块就很好的解决了这个问题, ...

  4. 洛谷——P1869 愚蠢的组合数

    P1869 愚蠢的组合数 题目描述 最近老师教了狗狗怎么算组合数,狗狗又想到了一个问题... 狗狗定义C(N,K)表示从N个元素中不重复地选取K个元素的方案数. 狗狗想知道的是C(N,K)的奇偶性. ...

  5. Grunt Gulp Browserify Webpack

    Grunt 是相比后面几个更早的项目,他依赖于各种插件的配置.这是一个很好的解决方案,但是请相信我,你不会想看到一个 300 行的 Gruntfile Gulp 提供了一个不一样的解决方案,而不是依赖 ...

  6. 【BZOJ 1478】 1478: Sgu282 Isomorphism (置换、burnside引理)

    1478: Sgu282 Isomorphism Description 给 定一个N 个结点的无向完全图( 任意两个结点之间有一条边), 现在你可以用 M 种颜色对这个图的每条边进行染色,每条边必须 ...

  7. [LOJ6191][CodeM]配对游戏(概率期望DP)

    n次向一个栈中加入0或1中随机1个,如果一次加入0时栈顶元素为1,则将这两个元素弹栈.问最终栈中元素个数的期望是多少. 首先容易想到用概率算期望,p[i][j][k]表示已加入i个数,1有j个,总长为 ...

  8. 【Trie】【kd-tree】计蒜客17122 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 I. Barty's Computer

    题意:2种操作:①往集合里添加一个串 ②给你四个小串a b c d,问你集合里有几个串S满足S=a+S1+b+c+S2+d的形式.S1 S2可以为空,并且a+S1+b=c+S2+d. 就搞四颗Trie ...

  9. 【深度搜索+剪枝】POJ1011-Sticks

    深搜部分和之前的POJ2362差不多,只是有几处需要额外的剪枝. [思路]排序后从最短木棒开始搜索至木棒长总和,如果木棒长总和sum能整除当前棒长,则进入深搜. [剪枝]先前POJ2362的剪枝部分不 ...

  10. 汇编语言---GCC内联汇编

    转:http://www.cnblogs.com/taek/archive/2012/02/05/2338838.html GCC支持在C/C++代码中嵌入汇编代码,这些代码被称作是"GCC ...