hdu acm-step 1.3.6 Wooden Sticks

 

 

    本题题意:有n根棍子,给出两个属性长度l和重量w,当加工当前棍子的长度和长度均大于上一根棍子时,可以不重置机器,每次重置机器要花1min,

    求最小时间。

    代码如下:

    

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
struct Node
{
        int l,w;
        bool operator<(const Node &node){if(l<node.l)return true;else if(l>node.l)return false;if(w<node.w)return true;return false;}
};
Node a[5000];
int b[5000];
int main()
{
        int T;
        scanf("%d",&T);
        while(T--)
        {
                memset(b,0,sizeof(b));
                int n;
                scanf("%d",&n);
                for(int i=0;i<n;i++)scanf("%d%d",&a[i].l,&a[i].w);
                sort(a,a+n);
                int count = 0;
                int sum=0;
                Node temp;
                for(int i=0;i<n;i++)
                {
                        if(b[i]==0)
                        {
                                sum++;
                                count++;
                                b[i] = 1;
                                temp = a[i];
                                if(count==n)break;
                        }
                        else continue;
                        for(int j=0;j<n;j++)
                        {
                                if(temp.l<=a[j].l&&temp.w<=a[j].w&&b[j]==0){temp=a[j];b[j]=1;count++;if(count==n)break;}
                        }
                        if(count==n)break;
                }
                printf("%d\n",sum);
        }
        return 0;
}

这道题就是两个循环,每处理完一根棍子后,要记录当前棍子的属性,然后跟下一根比较,仅当当前棍子的两个属性都大于上一根棍子时才进行比较,比较完n个棍子,就结束循环,打印结果。

 

posted @ 2017-08-19 10:53  mtl6906  阅读(133)  评论(0编辑  收藏  举报