码迷,mamicode.com
首页 > 其他好文 > 详细

HDU ACM 1051 Wooden Sticks

时间:2015-04-30 12:41:03      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:c   c++   acm   算法   贪心   

题意:一个机器处理木板,机器重置需要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;
}


HDU ACM 1051 Wooden Sticks

标签:c   c++   acm   算法   贪心   

原文地址:http://blog.csdn.net/a809146548/article/details/45391499

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!