ZOJ 1025 Wooden Sticks

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=25

题目大意:锯木桩,每次小于前面开过机的长和厚不用建立,大于的话就得重新发动,发动时间为1,为求最小发动世界。

先快排(从大到小),在求下降子序列。

先快排(从小到大),再求有几个连续上升子序列,下面代码按这种做法做


代码:

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<iostream>
using namespace std;
#pragma warning(disable:4996)

struct node
{
int l, w;
}data[2600];


bool cmp(struct node x, struct node y)
{
if (x.l != y.l)
return x.l < y.l;
else
return x.w < y.w;
}
int b[2060];
int n;
int LIS()
{
memset(b, 0, sizeof(b));
b[0] = 1;
int i, j;
for (i = 1; i < n; i++)
{
int k = 0;
for (j = 0; j < i; j++)
if (data[i].w < data[j].w && k < b[j])
k = b[j];
b[i] = k + 1;
}
int max = b[0];
for (i = 1; i < n; i++)
{
if (max < b[i])
max = b[i];
}
return max;




}


int main()
{
int T;
scanf("%d", &T);
while (T--)
{
//int n;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%d%d", &data[i].l, &data[i].w);
}
sort(data, data + n, cmp);
printf("%d\n", LIS());
}
//system("pause");
return 0;
}


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/S031302306/article/details/49903147
个人分类: 贪心
博主设置当前文章不允许评论。

没有更多推荐了,返回首页

不良信息举报

ZOJ 1025 Wooden Sticks

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭