Description
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 ( 9 , 4 ) , ( 2 , 5 ) , ( 1 , 2 ) , ( 5 , 3 ) , and ( 4 , 1 ) , then the minimum setup time should be
2 minutes since there is a sequence of pairs ( 4 , 1 ) , ( 5 , 3 ) , ( 9 , 4 ) , ( 1 , 2 ) , ( 2 , 5 ) .
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 2n 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
2
1
3
解题思路:看到题目,想到了排序了,然后往后走,只要遇到不符合的,就加一,但结果大了,
最后改成从头走到位,符合条件的标记,然后换起始点,再走,一直下去可解。
代码如下:
-
#include<iostream>
-
usingnamespacestd;
-
#defineMAX5005
-
inttime,n;
-
structdata
-
{
-
intl;
-
intw;
-
};
-
datainfo[MAX];
-
-
-
intcmp(constvoid*a,constvoid*b)
-
{
-
structdata*c=(data*)a;
-
structdata*d=(data*)b;
-
if(c->l!=d->l)
-
returnc->l-d->l;
-
else
-
returnc->w-d->w;
-
}
-
-
voidWooden_Sticks_Greedy()
-
{
-
qsort(info,n,sizeof(info[0]),cmp); //对结构体进行二级从小到大派讯
-
intmark[MAX]={0};
-
time=0;
-
inttemp;
-
for(inti=0;i<n;i++)
-
{
-
if(mark[i]==0)
-
{
-
temp=info[i].w;
-
for(intj=i+1;j<n;j++)
-
{
-
if(info[j].w>=temp&&mark[j]==0)
-
{
-
temp=info[j].w;
-
mark[j]=1;
-
}
-
}
-
time++;
-
}
-
}
-
cout<<time<<endl;
-
}
-
-
intmain()
-
{
-
inti,test;
-
cin>>test;
-
while(test--)
-
{
-
cin>>n;
-
for(i=0;i<n;i++)
-
cin>>info[i].l>>info[i].w;
-
Wooden_Sticks_Greedy();
-
}
-
return0;
- }
分享到:
相关推荐
用贪心算法解决POJ 1065的木棍处理问题
北大POJ1011-Sticks 解题报告+AC代码
详细解释 ,既有源代码又有书面文字解释,ppt,在VC6上完成
poj 2452 Sticks Problem.md
北大POJ2513-Colored Sticks【TrieTree+MergeSet+EulerPath】 解题报告+AC代码
POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类
1. 最近点对问题的算法实现 2. 利用分治法设计一个计算两个 n 位的大整数相乘的算法,要求计算时间低于 O(n2) 5. Poj1065 Wooden St
poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题...
POJ第1861题源码 POJ第1861题源码 POJ第1861题源码
北大POJ1159-Palindrome 解题报告+AC代码
poj分类poj分类poj分类poj分类
C语言 poj npu 西工大 C语言Poj答案全完整打包,给有需要的朋友
poj 3414解题报告poj 3414解题报告poj 3414解题报告poj 3414解题报告
poj 1012解题报告poj 1012解题报告poj 1012解题报告poj 1012解题报告
poj 2329解题报告poj 2329解题报告poj 2329解题报告poj 2329解题报告
poj 1659解题报告poj 1659解题报告poj 1659解题报告poj 1659解题报告
POJ1503解答 POJ1503解答,正确答案(已通过POJ)
北大POJ2002-Squares 解题报告+AC代码
POJ1048,加强版的约瑟夫问题 难度中等