1008 加工木棍问题

来源:互联网 发布:linux服务器架设 鸟哥 编辑:程序博客网 时间:2024/04/29 08:09
简单题意:


有一堆n木棍。每个棍子的长度和重量都提前知道。棒是由木工机床在加工一个接一个时尚。它需要一些时间,启动时间,呼吁机器准备处理一根棍子。设置时间与清洁有关操作和改变机器的工具和形状。给出了木工机床的安装时间如下:

(一)设置第一根木棍是1分钟的时间。

(b)后加工一根长度和重量w,机器将不需要设置时间一根长度和重量w '如果l < = l”和w < = w”。否则,它将需要1分钟的设置。

思路:

将其给的数据,先将其从大到小排序,再依次比较第二个值即可。

代码如下:

#include<iostream>#include<algorithm>#include<cstring>using namespace std;struct club{int x,y;};bool cmp (const club &k,const club&h){if(k.x<h.x) return true;elseif(k.x==h.x)return k.y<h.y ;return false;}int main(){int b[10000];int m,n,sum=0,i,j,pp;club a[10000];cin>>m;while(m--){cin>>n;for(i=1;i<=n;i++){cin>>a[i].x >>a[i].y ;}memset(b,0,sizeof(b));sort(a+1,a+n+1,cmp);                sum=0;            for(i=1;i<=n;i++){                        if(b[i]==1)                          continue;b[i]=1;sum++;                        pp=a[i].y;for(j=i+1;j<=n;j++)//将第二个值比较{if(pp<=a[j].y&&b[j]==0){pp =a[j].y ;b[j]=1;//若符合则将该数标记, 防止重复计算}}int kk=0;                for(j=1;j<=n;j++)//判断是否所有的数都以被标记                   if(b[j]==1)                     kk++;                if(kk==n)                  break;}cout<<sum<<endl;}}
感想: 此类问题比较简单的贪心问题,比较再标记即可。

ACID:00737746


0 0