HDU 2037 - 今年暑假不AC(贪心 + 动态)

2014-11-24 02:44:45 · 作者: · 浏览: 2
贪心算法:
#include  
#include  
using namespace std;  
struct TV{  
    int begin;  
    int end;  
}Tv[105];  
bool cmp(TV a,TV b)  
{  
    return a.end < b.end;  
}   
int main()  
{  
    int n, i;  
    while(cin >> n && n != 0)  
    {  
        int count = 1;  
        for(i = 0; i < n; i++)  
        {  
            cin >> Tv[i].begin >> Tv[i].end;  
        }  
        sort(Tv,Tv+n,cmp);  
      
        int End=Tv[0].end;  
        for(i=1; i= End)  
            {  
                count++;  
                End = Tv[i].end;  
            }  
        }  
        cout << count << endl;  
    }  
    return 0;  
}  

动态规划:
#include   
#include 
struct c { int x; int y; int ord; }d[100]; int cmp(const struct c *a, const struct c *b) { if ((*a).x == (*b).x) return (*a).y - (*b).y; else return (*a).x - (*b).x; } int main(void) { int i, j, n, max; while (scanf("%d", &n), n) { for (max = i = 0; i < n; i++) { scanf("%d%d", &d[i].x, &d[i].y); d[i].ord = 1; } qsort(d, n, sizeof(struct c), cmp); d[n-1].ord = 1; for (i = n - 2; i >= 0; i--) { for (j = i + 1; j < n; j++) { if (d[i].y <= d[j].x && d[i].ord < d[j].ord + 1) d[i].ord = d[j].ord + 1; } if (max < d[i].ord) max = d[i].ord; } printf("%d\n", max); } return 0; }