码迷,mamicode.com
首页 > 其他好文 > 详细

HDU1051 Wooden Sticks【贪心】

时间:2015-04-18 14:38:21      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=1051


题目大意:

有N根木棍,每根木棍的长度和质量是已知的,机器要处理这N根木棍,处理时间和木棍的长度和

权重有关。第一根木棍的处理时间为1min,之后处理的木棍如果长度大于等于前一根木棍的长度

并且权重也大于等于前一根木棍的长度,就不需要处理时间;否则就需要1min的处理时间。问:

小的处理时间为多少。


思路:

贪心思想。先将木棍按长度从小到大排列,如果长度一致,则按权重从小到大排列。然后根据题目

要求,如果后边的木棍长度和权重都大于前者,则不需要处理时间,否则加1min处理时间。


AC代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAXN = 5050;

struct Node
{
    int l, w;
    int flag;
}node[MAXN];

int cmp(Node a, Node b)
{
    if(a.l != b.l)
        return a.l < b.l;
    return a.w < b.w;
}

int main()
{
    int N,T;
    cin >> T;
    while(T--)
    {
        cin >> N;
        memset(node,0,sizeof(node));
        for(int i = 0; i < N; ++i)
        {
            cin >> node[i].l;
            cin >> node[i].w;
        }
        sort(node,node+N,cmp);
        int Sum = 0;
        for(int i = 0; i < N; ++i)
        {
            if(node[i].flag == 1)
                continue;
            Sum++;
            int k = i;
            for(int j = i+1; j < N; ++j)
            {
                if(node[j].l >= node[k].l && node[j].w >= node[k].w && node[j].flag == 0)
                {
                    node[j].flag = 1;
                    k = j;
                }
            }
        }
        printf("%d\n",Sum);
    }

    return 0;
}


HDU1051 Wooden Sticks【贪心】

标签:

原文地址:http://blog.csdn.net/lianai911/article/details/45112813

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!