I

来源:互联网 发布:排课软件 编辑:程序博客网 时间:2024/05/16 19:19

题目编号:I

题目大意:有N个一对数放在一对,第一对用1分钟,当一下对两个数都比前一对大时不用时间,否则用1分钟。求最少时间。

解题思路:典型的贪心算法。首先,创建一个结构体,里面有2个数和一个标记,并重载运算符来排序。然后贪心的典型步骤即可。

解题感想:看透本质,理清思路,水到渠成。

#include<iostream>#include<algorithm>using namespace std;struct group{         int x;         int y;         int A;         bool operator<(const group &a)const{         if(x!=a.x)                 { return x<a.x;}         else                 { return y<=a.y;}         }}G[5001];int main(){         int n,a,s;         int i,j,k;         cin>>n;         while(n--)         {                  cin>>a;                  for(i=0;i<a;i++)                  {                           cin>>G[i].x>>G[i].y;                           G[i].A=0;                  }                  sort(G,G+a);                  s=0;                  for(i=0;i<a;i++)                  {                           if(G[i].A==0)                           {                                    s++;                                    G[i].A=1;                                    k=G[i].y;                           for(j=i+1;j<a;j++)                           {                                   if(k<=G[j].y&&G[j].A==0)                                   {                                            G[j].A=1;                                            k=G[j].y;                                   }                           }                  }                  }                   cout<<s<<endl;         }         return 0;}

0 0