HDU 1051 Wooden Sticks

来源:互联网 发布:with php config 编辑:程序博客网 时间:2024/05/19 03:21

此题大意是说给你N根木头的长度和重量,制作第一根木头时需要一分钟,以后每根木头的长度和重量只要都比前一根大就不需要建立时间,否则需要加一分钟,让你求最少时间。这是一道贪心题目,首先,将所有的木头按照长度从小到大排序,然后比较重量就可以了。可能你还有点迷糊,看一下代码你就明白了。

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;struct sa{    int l;    int w;}data[10000];int cmp(sa a,sa b){    if(a.l!=b.l)    return a.l<b.l;    return a.w<b.w;}int z[10000];int main(){    int n;    while(scanf("%d",&n)!=EOF)    {        for(int a=0;a<n;a++)        {            int t;            scanf("%d",&t);            for(int b=0;b<t;b++)            {             scanf("%d%d",&data[b].l,&data[b].w);            }            sort(data,data+t,cmp);            memset(z,0,sizeof(z));            int x=0,y=0,i=0,j=0,time=0,k=0;            while(k<t)            {               for(i=j;i<t;i++)               if(z[i]==0)               {                   z[i]=1;                   j=i+1;                   x=data[i].l;                   y=data[i].w;                   k++;                   break;               }               for(i=j;i<t;i++)               {                   if(z[i]==0&&x<=data[i].l&&y<=data[i].w)                   {                      z[i]=1;                      x=data[i].l;                      y=data[i].w;                      k++;                   }               }               time++;            }            printf("%d\n",time);        }    }}