您的位置:首页 > 其它

ZOJ 1025 Wooden Sticks

2013-08-14 16:37 302 查看
  题目大意:有n个木棍,分别具有长度li和重量wi。对于木棍s1和s2,若l1<=l2且w1<=w2,则s1、s2可构成单调递增序列。求n个木棍中这样序列的个数。

  最先的想法是,先排序,然后一遍一遍扫描,直到全部处理完。

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define MAXN 5000+10

struct Wooden
{
int l, w;
bool operator < (const Wooden& x) const
{
if (l != x.l)   return l < x.l;
else return w < x.w;
}
};
Wooden wooden[MAXN];
bool processed[MAXN];

int main()
{
#ifdef LOCAL
freopen("in", "r", stdin);
#endif
int T;
scanf("%d", &T);
while (T--)
{
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++)
scanf("%d%d", &wooden[i].l, &wooden[i].w);
sort(wooden, wooden+n);
int time = 0;
memset(processed, 0, sizeof(processed));
int remain = n;
while (remain > 0)
{
time++;
int prel = -1, prew = -1;
for (int i = 0; i < n; i++)
if (!processed[i] && wooden[i].l >= prel && wooden[i].w >= prew)
{
processed[i] = true;
remain--;
prel = wooden[i].l;
prew = wooden[i].w;
}
}
printf("%d\n", time);
}
return 0;
}


View Code
  看到网上说可以通过求解最长(严格)递减序列的答案,可是怎么都理解不了,留待以后吧...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: