There is a pile of n wooden sticks. The length and weight of each stick are known in advance. The sticks are to be processed by a woodworking machine in one by one fashion. It needs some time, called setup time, for the machine to prepare processing a stick. The setup times are associated with cleaning operations and changing tools and shapes in the machine. The setup times of the woodworking machine are given as follows:
(a) The setup time for the first wooden stick is 1 minute.
(b) Right after processing a stick of length l and weight w , the machine will need no setup time for a stick of length l' and weight w' if l<=l' and w<=w'. Otherwise, it will need 1 minute for setup.
You are to find the minimum setup time to process a given pile of n wooden sticks. For example, if you have five sticks whose pairs of length and weight are (4,9), (5,2), (2,1), (3,5), and (1,4), then the minimum setup time should be 2 minutes since there is a sequence of pairs (1,4), (3,5), (4,9), (2,1), (5,2).
Input
The input consists of T test cases. The number of test cases (T) is given in the first line of the input file. Each test case consists of two lines: The first line has an integer n , 1<=n<=5000, that represents the number of wooden sticks in the test case, and the second line contains n 2 positive integers l1, w1, l2, w2, ..., ln, wn, each of magnitude at most 10000 , where li and wi are the length and weight of the i th wooden stick, respectively. The 2n integers are delimited by one or more spaces.
Output
The output should contain the minimum setup time in minutes, one per line.
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
题意:
个人感觉翻译不太好翻译,理解就行,光看输入输出就差不多了。
思路:
先将数据排序(L或W),在比较其后面的数据是否比他都大,大的话,记录下来,再从当前位置开始比较,依次类推;
如执行玩依次后,再从没有标记的开始执行;依次执行完。
提交了好几次,刚开始把题意理解错了,后来又把比较函数写错了。
代码:
#include
#include
#include
using namespace std;
struct Mystruct
{
int start,end;
};
bool cmp(const Mystruct&a,const Mystruct &b)
{
if(a.startreturn true ;
else if(a.start==b.start)
return a.endelse return false;
}
int main()
{
int T;
cin>>T;
for(int i=0;i{
int num=0;
Mystruct My[5001];
int arr[5001];
memset(arr,0,sizeof(arr));
int n;
cin>>n;
int a,b;
for(int j=0;j{
cin>>a>>b;
My[j].start=a;
My[j].end=b;
}
sort(My,My+n,cmp);
for(int j=0;j{
if(arr[j]!=0)
continue;
int m=j;
for(int k=m+1;k{
if(My[m].end<=My[k].end)
{
if(arr[k]==0)
{
arr[k]++;
m=k;
}
}
}
}
for(int j=0;j{
if(arr[j]==0)
num++;
}
cout<}
system("pause");
return 0;
}