有N根木棍等待处理。机器在处理第一根木棍时需要准备1分钟,此后遇到长宽都不大于前一根木棍的木棍就不需要时间准备,反之则需要1分钟重新准备。比如木棍按照(3,3)、(1,3)、(1,4)、(2,3)的顺序进入,共需要准备3分钟
Input
第一行是T,表示测试数据个数。测试数据的第一行是N(1 <= N <= 5000)此后一行是 l1 , w1 , l2 , w2 ,…, ln , wn……长宽都小于10000
Output
每个一行,表示最短准备时间
Sample Input
3
5
4 9 5 2 2 1 3 5 1 4
3
2 2 1 1 2 2
3
1 3 2 2 3 1
Sample Output
2
1
3
中文题意如上,思路比较简单,首先要排序,把长宽都是从大到小排序,直接用一个数组维护一个序列就可以,如果对于每个木棒,如果能够放到某个序列后面就放上去,如果不能就再增加一个序列。最后序列的个数,就是需要花费的时间。注意每次我们都要把木棒放到第一个可以放的序列。因为后面的木棒肯定是比当前木棒的长或宽小的,如果把当前的木棒放到后面的序列就不符合贪心的策略了。
代码如下:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<vector>