首页 > 代码库 > HDU 1051 Wooden Sticks

HDU 1051 Wooden Sticks

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 5000struct 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;}

 

HDU 1051 Wooden Sticks