比赛 20121009 评测结果 TWWTT
题目名称 木棍 最终得分 0
用户昵称 万里长城 运行时间 3.507 s
代码语言 C++ 内存使用 3.53 MiB
提交时间 2012-10-09 21:20:51
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <vector>
#include <algorithm>
#define rep(i, n) for (int i = 0; i < (n); i++)
#define clr(x, n) memset(x, n, sizeof(x))
#define maxn 50004
using namespace std;

void setIO(string name) {
        string in_f = name + ".in";
        string out_f = name + ".out";
        freopen(in_f.c_str(), "r", stdin);
        freopen(out_f.c_str(), "w", stdout);
}

struct wood {
        int l, w;
};

int n;
int len, ans,pos;
vector<wood> w;
int dad[maxn], lis[maxn];

void init() {
        scanf("%d", &n);
        wood w0;
        rep(i, n) {
                scanf("%d%d", &w0.l, &w0.w);
                w.push_back(w0);
        }
        ans = 0;
}

void update() {
        clr(dad, -1);
        clr(lis, 0);
        len = pos = 0;
}

void calc() {
        rep(i, w.size()) {
                lis[i] = 1;
                rep(j, i) {
                        if (w[j].l <= w[i].l && w[j].w <= w[i].w && lis[j] + 1 > lis[i]) {
                                dad[i] = j;
                                lis[i] = lis[j] + 1;
                        }
                }
                if (len < lis[i]) {
                        len = lis[i];
                        pos = i;
                }                        
        }
}

void del() {
        while(dad[pos] != -1) {
                w.erase(w.begin() + pos);
                pos = dad[pos];
        }
        w.erase(w.begin() + pos);
}

bool cmp(wood x, wood y) {
        if (x.l < y.l) return true;
        if (x.l > y.l) return false;
        if (x.w < y.w) return true;
        return false;
}

void solve() {
        sort(w.begin(), w.end(), cmp);
        while(!w.empty()) {
                update();
                calc();
                del();
                ans++;
        }
        printf("%d\n", ans);
}

int main() {
        setIO("wooden");
        init();
        solve();
        return 0;
}