一道贪心的题,我想知道这种方法为什么不对。。。
2014-02-18 17:15
183 查看
题目:
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
Sample Output
我的思路就是找出所有可以一起运的,然后在剩下的里面找可以同时运的,依此类推。同时运的组数就是最少需要时间的十分之一。
代码如下:
但是这个代码老是WA。。。
求大神指点哪里有问题。。。
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
我的思路就是找出所有可以一起运的,然后在剩下的里面找可以同时运的,依此类推。同时运的组数就是最少需要时间的十分之一。
代码如下:
#include<cstdio> #include<algorithm> using namespace std; struct node { int a; int b; }; bool cmp(struct node a,struct node b) { return a.a<b.a; } main() { struct node shi[220],hu; int sum; int t=0; int x,y; int i,j; int n; scanf("%d",&t); for(;t>0;t--) { sum=0; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d%d",&shi[i].a,&shi[i].b); if(shi[i].a>shi[i].b) { hu.a=shi[i].a; shi[i].a=shi[i].b; shi[i].b=hu.a; } } sort(shi,shi+n,cmp); while(n) { x=shi[0].a; y=shi[0].b; for(j=0;j<n-1;j++) { shi[j]=shi[j+1]; } n--; for(i=0;i<n;i++) { if(y<=shi[i].a) { x=shi[i].a; y=shi[i].b; for(j=i;j<n-1;j++) { shi[j]=shi[j+1]; } n--; i--; } } sum++; } sum=sum*10; printf("%d\n",sum); } }
但是这个代码老是WA。。。
求大神指点哪里有问题。。。
相关文章推荐
- responseXML 为什么为空或者出错?调试这种情况的方法
- Image image = Toolkit.getDefaultToolkit().getImage("picture/bg.jpg");// 这种图片加载方法为什么要 先最小化窗口然后才会显示
- 用最有效的算法的出2*8的积。为什么说这种方法最有效率?
- css清除浮动float的三种方法总结,为什么清浮动?浮动会有那些影响?
- 输入法 浏览器 黑屏 没有解决不了的问题,只是你的方法不对
- 多线程:创建Thread为什么要调用start启动,而不能直接调用run方法
- 莫涛的一道无语贪心题
- 抽象方法为什么不能是static或native或synchronized
- JAVA中重写equals()方法为什么要重写hashcode()方法?
- 公司不是我的家,那我为什么还要加班?兼说如何在公司高效提升自己的方法
- 为什么要重写hashCode()方法和equals()方法以及如何进行重写
- 为什么String作为引用类型,在方法内却改变不了String的内容
- Java 重写equals()时为什么要重写hashCode()方法
- 为什么要在重写了equals方法时还要重写hashcode方法
- iOS - 重写set和get方法后,为什么使用时会发生无效?解析命名规范
- java主方法main()方法为什么要必须是静态static的?
- 为什么构造方法不是静态方法
- 为什么要读书,有没有替代方法
- java实体类为什么要写.toString()方法?
- 为什么360浏览器,打开几个页面,然后不对电脑进行任何操作,等过很长时间之后,为什么内存占用会逐渐上升直到崩溃??表现为操作系统卡的不行,做什么都卡