1008 Problem I
问题:加工一些木棍,当之后加工的木棍,长、重都不小于前一根时,不需要花费更多的时间,否则,时间加一分钟,求加工所有木棍,所需的最短时间。
思路:将所有木棍的长由小到大排序,在长度相同的情况下,按重量排序,因为木棍的长度顺序确定,所以只需比较重量,如果重量比前一根小,则时间加一分钟。
感想:在初期的思考中,一直在纠结于如何将所有的木棍长和重量比较后,然后记录下可以在同一时间处理的木棍,代码却迟迟不能实现,后来终于发现,因为木棍已经按长度排序,那么变量就只有重量,问题自然变得简单了许多。
#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;
}