当前位置:编程学习 > C/C++ >>

hdu_1051-Wooden Sticks

[cpp] 
/*      题目大意:将木棍分堆,保证每堆木头的长度和重量都是非递减的,最少分几堆 
 *      解题思路:将木头按长度非递减排序,然后从第一个开始将重量能组成非递减的木棍分堆即可 
 */   
#include <cstdio>  
#include <cstring>  
#include <algorithm>  
using namespace std;  
  
#define MAX 10002  
  
struct node {  
    int x, y;  
} a[MAX];  
  
bool cmp(node a, node b) {  
    if( a.x == b.x ) return a.y < b.y;  
    return a.x < b.x;  
}  
  
int main(int argc, char const *argv[]) {  
#ifndef ONLINE_JUDGE  
    freopen("test.in", "r", stdin);  
#endif  
    int cnt, ans, n;  
    scanf("%d", &cnt);  
    for(int k = 0; k < cnt; k ++) {  
        ans = 0;  
        scanf("%d", &n);  
        for(int i = 0; i < n; i ++)  
            scanf("%d %d", &a[i].x, &a[i].y);  
        sort(a, a + n, cmp);  www.zzzyk.com
        for(int i = 0; i < n; i ++) {  
            if( !a[i].x && !a[i].y ) continue ;  
            for(int j = i + 1; j < n; j ++) {  
                if( a[i].y <= a[j].y ) {  
                    a[i].x = a[j].x;  
                    a[i].y = a[j].y;  
                    a[j].x = a[j].y = 0;  
                }  
            }  
            ans ++;  
        }  
        printf("%d\n", ans);  
    }  
    return 0;  
}  
 
补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,