程序员人生 网站导航

HDU ACM 1051 Wooden Sticks

栏目:综合技术时间:2015-09-10 08:31:59

题意:1个机器处理木板,机器重置需要1分钟,如果下1块木板的长度和质量均大于等于前1块的则机器无需重置,否则重置,1开始机器也要花费1分钟,求处理完木板的最短时间。

分析:先按木板的长度排序,若长度相同则按质量排序(从小到大),然后从前往后扫描数组,找出符合的则标记,找完1轮在回头找,直到所有木板被标记则可得最小时间。

#include<iostream> #include<algorithm> using namespace std; #define N 5005 struct A { int w,l; } a[N]; bool cmp(A a,A b) { if(a.l<b.l) return true; else if(a.l>b.l) return false; else if(a.w<=b.w) return true; else return false; } bool isuser[N]; int main() { int T,n,i,count,j,k; cin>>T; while(T--) { cin>>n; for(i=0;i<n;i++) cin>>a[i].l>>a[i].w; sort(a,a+n,cmp); //先按木板长排序,相等则按质量排序,从小到大 memset(isuser,false,sizeof(isuser)); count=0; for(i=0;i<n;i++) { if(!isuser[i]) { count++; k=i; for(j=k+1;j<n;j++) if(!isuser[j] && a[j].l>=a[k].l && a[j].w>=a[k].w) { isuser[k]=true; isuser[j]=true; k=j; } if(!isuser[k]) isuser[k]=true; } } cout<<count<<endl; } return 0; }


------分隔线----------------------------
------分隔线----------------------------

最新技术推荐