1001 wooden sticks

来源:互联网 发布:java将信息写入文件 编辑:程序博客网 时间:2024/06/05 19:27

1001  Problem B

There is a pile of n wooden sticks. The length and weight of each stick are known in advance.

问题:加工一些木棍,当之后加工的木棍,长、重都不小于前一根时,不需要花费更多的时间,否则,时间加一分钟,求加工所有木棍,所需的最短时间。

思路:将所有木棍的长由小到大排序,在长度相同的情况下,按重量排序,因为木棍的长度顺序确定,所以只需比较重量,如果重量比前一根小,则时间加一分钟。

感想:在初期的思考中,一直在纠结于如何将所有的木棍长和重量比较后,然后记录下可以在同一时间处理的木棍,代码却迟迟不能实现,后来终于发现,因为木棍已经按长度排序,那么变量就只有重量,问题自然变得简单了许多。

#include<iostream>

#include<algorithm>

using namespace std;

struct sti{

      int l;

      int w;

      bool b;

}s[5000];

bool cmp(const sti&a,const sti &b){

      if(a.l!=b.l) return a.l<b.l;

      else return a.w<b.w;

}

int main(){

    int T,n,i,j,wight;

    cin>>T;

    while(T--){

        cin>>n;

        int k=0;

        for(i=0;i<n;i++) {cin>>s[i].l>>s[i].w; s[i].b=false;}

        sort(s,s+n,cmp);

        for(i=0;i<n;i++){

            if(s[i].b==false)

             {

                s[i].b=true;

                wight=s[i].w;

                k++;

             }

            for(j=i+1;j<n;j++){

               if((s[j].b==false)&&(wight<=s[j].w))

                 {

                    wight=s[j].w;

                    s[j].b=true;

                 }

            }

        }

        cout<<k<<endl;

    }

    return 0;

}

0 0
原创粉丝点击