标签:
http://acm.hdu.edu.cn/showproblem.php?pid=1051
题意:
给定n根木条的长度l和重量w
从1min开始,每次处理长度为l重量为w的木条后,处理l‘>=l且w‘>=w的木条不费时间,否则+1min
求处理全部木条所需的最短时间
解法:
贪心法
将木条按长度l和重量w升序排序
从第一个未标记的木条开始,往后扫一遍将第一个满足w‘>=w的木条进行标记,直到所有木条被标记
则扫的次数就是最短时间
代码: 0MS 1100K
#include <cstdio> #include <algorithm> using namespace std; #define N 5000 struct Stick { int l, w; } s[N]; bool vis[N]; bool cmp(Stick a, Stick b) { return a.l < b.l || a.l == b.l && a.w < b.w; } int main() { int t, n, ans; scanf("%d", &t); while (t--) { scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d%d", &s[i].l, &s[i].w); vis[i] = 0; } sort(s, s + n, cmp); ans = 0; for (int i = 0; i < n; i++) { if (!vis[i]) { for (int j = i + 1, mn = s[i].w; j < n; j++) { if (!vis[j] && s[j].w >= mn) { mn = s[j].w; vis[j] = 1; } } ans++; } } printf("%d\n", ans); } return 0; }
标签:
原文地址:http://www.cnblogs.com/rsola/p/4266022.html