标签:
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1051
题目大意:
有N根木棍,每根木棍的长度和质量是已知的,机器要处理这N根木棍,处理时间和木棍的长度和
权重有关。第一根木棍的处理时间为1min,之后处理的木棍如果长度大于等于前一根木棍的长度
并且权重也大于等于前一根木棍的长度,就不需要处理时间;否则就需要1min的处理时间。问:
最小的处理时间为多少。
思路:
贪心思想。先将木棍按长度从小到大排列,如果长度一致,则按权重从小到大排列。然后根据题目
要求,如果后边的木棍长度和权重都大于前者,则不需要处理时间,否则加1min处理时间。
AC代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAXN = 5050;
struct Node
{
int l, w;
int flag;
}node[MAXN];
int cmp(Node a, Node b)
{
if(a.l != b.l)
return a.l < b.l;
return a.w < b.w;
}
int main()
{
int N,T;
cin >> T;
while(T--)
{
cin >> N;
memset(node,0,sizeof(node));
for(int i = 0; i < N; ++i)
{
cin >> node[i].l;
cin >> node[i].w;
}
sort(node,node+N,cmp);
int Sum = 0;
for(int i = 0; i < N; ++i)
{
if(node[i].flag == 1)
continue;
Sum++;
int k = i;
for(int j = i+1; j < N; ++j)
{
if(node[j].l >= node[k].l && node[j].w >= node[k].w && node[j].flag == 0)
{
node[j].flag = 1;
k = j;
}
}
}
printf("%d\n",Sum);
}
return 0;
}
标签:
原文地址:http://blog.csdn.net/lianai911/article/details/45112813