HDU 1051 - Wooden Sticks

贪心吧

保证一维非递减的情况下,计算另一维上最少有几个非递减序列,就是答案

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstdio>
 4 using namespace std;
 5 int t,n;
 6 struct P{
 7     int l,w;
 8 }s[5005];
 9 bool cmp(P a,P b)
10 {
11     return a.l==b.l?a.w<b.w : a.l<b.l;
12 }
13 int ans[5005];
14 int main()
15 {
16     scanf("%d",&t);
17     while(t--)
18     {
19         scanf("%d",&n);
20         for(int i=0;i<n;i++) scanf("%d%d",&s[i].l,&s[i].w);
21         sort(s,s+n,cmp);
22         ans[0]=0;
23         int cnt=0;
24         for(int i=0;i<n;i++)
25         {
26             bool flag=0;
27             for(int j=0;j<cnt;j++)
28             {
29                 if(ans[j]<=s[i].w)
30                 {
31                     ans[j]=s[i].w;
32                     flag=1;
33                     break;
34                 }
35             }
36             if(!flag)
37             {
38                 ans[cnt++]=s[i].w;
39             }
40         }
41         cout<<cnt<<endl;
42     }
43 } 

 

posted @ 2016-05-03 23:04  nicetomeetu  阅读(124)  评论(0编辑  收藏  举报