贪心算法 1008

来源:互联网 发布:大额淘宝优惠券哪里领 编辑:程序博客网 时间:2024/06/08 00:04
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
213
 超级标准的贪心算法
不过加一个 自定义数组标记是否被选
就好了~
#include<iostream>#include<string.h>#include<set>#include<stdio.h>#include<vector>#include<algorithm>#include<numeric>#include<math.h>#include<string.h>#include<sstream>#include<stdio.h>#include<string>#include<cstdlib>#include<algorithm>#include<iostream>#include<map>#include<queue>#include<string>using namespace std;struct hh{    int a;    int b;};bool cmp(const hh &s,const hh &w){    if(s.a<w.a) return true;    else if(s.a==w.a)return s.b<w.b;    return false;}int main(){    int n;    cin>>n;    int i;    hh  a[10000];    int b[10000];    int max;    int t;    for(i=1;i<=n;i++)    {        int w;        cin>>w;        int j;        for(j=1;j<=w;j++)        {            cin>>a[j].a;            cin>>a[j].b;        }        sort(a+1,a+w+1,cmp);        memset(b,0,sizeof(b));        int l;        int sum;        sum=0;        int i,paopao ,s,ss,sss,ff;        for(j=1;j<=w;j++)        {            if(b[j]==1)            continue;            b[j]=1                                                                                                      ;            sum++;            paopao=a[j].b;                for(ss=j+1;ss<=w;ss++)            {                if(paopao<=a[ss].b&&b[ss]==0)                { paopao=a[ss].b;                 b[ss]=1;                }            }            sss=0;            for(ff=1;ff<=w;ff++)            if(b[ff]==1)            sss++;            if(sss==w)            break;        }        cout<<sum<<endl;    }    return 0;}


0 0
原创粉丝点击