POJ 1065 Wooden Sticks 贪心

来源:互联网 发布:凌虚剑淘宝 编辑:程序博客网 时间:2024/05/16 11:22

题目链接:http://poj.org/problem?id=1065


题目大意:需加工n个木棍,每个木棍有长度L和重量W两个参数,机器处理第一个木棍 用时1分钟,如果当前处理的木棍为L和W,之后处理的木棍L' 和W' 满足:L <= L' 并且 W <= W' ,则不需要额外的时间,否则,需要加时1分钟设置。


题目解析:贪心策略,将木棍按照长度L从小到大排序,然后通过枚举每个木棍的重量,判断W有多少个上升的序列,即为最终所求。时间复杂度为O(n*n)。


程序源码:

#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int MAXN = 5010;struct Node {    int l;    int w;    friend bool operator < (Node a, Node b) {        if (a.l != b.l)            return a.l < b.l;        return a.w < b.w;    }}s[MAXN];bool flag[MAXN];int  main() {    int t, n;    cin >> t;    while (t--) {        cin >> n;        for (int i = 1; i <= n; i++) {            cin >> s[i].l >> s[i].w;        }        sort(s+1, s+n+1);        memset(flag, 0, sizeof(flag));        int ans = 0;        for (int j = 1; j <= n; j++){            if (!flag[j]) {                flag[j] = true;                int z = j;                for (int i = z+1; i <= n; i++) {                    if (s[i].w >= s[z].w && (!flag[i])) {                        z = i;                        flag[i] = true;                    }                }                ans++;            }        }        cout << ans << endl;    }    return 0;}



0 0
原创粉丝点击