题目链接:
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; }
时间: 2024-11-08 22:10:00