(博客搬迁)hdu1069 Monkey and Banana(最长不下降子序列)
2011-11-07 19:21
295 查看
思想:如序列{4,6,5,7,3},则其最长不下降子序列为{4,6,7};
算法实现:时间复杂度(n^2)
int Lc(int num[], int n)
{
int i,j, max = 0;
int list
;
for(i = 0; i < n; i++)
{
list[i] = 1;
for(j = 0; j < i; j++)
{
if(num[i] > num[j] && list[j] >= list[i])
{
list[i] = list[j] + 1;
}
}
}
return max;
}
hdu 1069:这题可以通过数据的预处理,把它转化为最长不下降子序列问题。
code:
#include<stdio.h>
#include<stdlib.h>
#define N 35
struct Node
{
int x, y, z;
int max;
}node[N*6];
int cmp(const void* a, const void* b)
{
struct Node *c = (Node*)a;
struct Node *d = (Node*)b;
if(c->x != d->x)return c->x - d->x;
else if(c->y != d->y)return c->y - d->y;
else return c->z - d->z;
}
int main()
{
int xi
, yi
, zi
;
int n;
int i, j, k;
int max = 0;
int cas = 1;
while(scanf("%d", &n ) && n)
{
k = 0;
for(i = 0; i < n; i++)
{
scanf("%d %d %d", &xi[i], &yi[i], &zi[i]);
node[k].x = xi[i];
node[k].y = yi[i];
node[k++].z = zi[i];
node[k].x = xi[i];
node[k].y = zi[i];
node[k++].z = yi[i];
node[k].x = zi[i];
node[k].y = yi[i];
node[k++].z = xi[i];
node[k].x = yi[i];
node[k].y = zi[i];
node[k++].z = xi[i];
node[k].x = yi[i];
node[k].y = xi[i];
node[k++].z = zi[i];
node[k].x = zi[i];
node[k].y = xi[i];
node[k++].z = yi[i];
}
qsort(node, k, sizeof(node[0]), cmp);
max = 0;
for(i = 0; i < k; i++)
{
node[i].max = node[i].z;
for(j = i-1; j >= 0; j--)
{
if(node[i].x > node[j].x && node[i].y > node[j].y && node[i].max < (node[i].z + node[j].max))
node[i].max = node[i].z + node[j].max;
}
max = max > node[i].max ? max : node[i].max;
}
printf("Case %d: maximum height = %d\n", cas++, max);
}
return 0;
}
算法实现:时间复杂度(n^2)
int Lc(int num[], int n)
{
int i,j, max = 0;
int list
;
for(i = 0; i < n; i++)
{
list[i] = 1;
for(j = 0; j < i; j++)
{
if(num[i] > num[j] && list[j] >= list[i])
{
list[i] = list[j] + 1;
}
}
}
return max;
}
hdu 1069:这题可以通过数据的预处理,把它转化为最长不下降子序列问题。
code:
#include<stdio.h>
#include<stdlib.h>
#define N 35
struct Node
{
int x, y, z;
int max;
}node[N*6];
int cmp(const void* a, const void* b)
{
struct Node *c = (Node*)a;
struct Node *d = (Node*)b;
if(c->x != d->x)return c->x - d->x;
else if(c->y != d->y)return c->y - d->y;
else return c->z - d->z;
}
int main()
{
int xi
, yi
, zi
;
int n;
int i, j, k;
int max = 0;
int cas = 1;
while(scanf("%d", &n ) && n)
{
k = 0;
for(i = 0; i < n; i++)
{
scanf("%d %d %d", &xi[i], &yi[i], &zi[i]);
node[k].x = xi[i];
node[k].y = yi[i];
node[k++].z = zi[i];
node[k].x = xi[i];
node[k].y = zi[i];
node[k++].z = yi[i];
node[k].x = zi[i];
node[k].y = yi[i];
node[k++].z = xi[i];
node[k].x = yi[i];
node[k].y = zi[i];
node[k++].z = xi[i];
node[k].x = yi[i];
node[k].y = xi[i];
node[k++].z = zi[i];
node[k].x = zi[i];
node[k].y = xi[i];
node[k++].z = yi[i];
}
qsort(node, k, sizeof(node[0]), cmp);
max = 0;
for(i = 0; i < k; i++)
{
node[i].max = node[i].z;
for(j = i-1; j >= 0; j--)
{
if(node[i].x > node[j].x && node[i].y > node[j].y && node[i].max < (node[i].z + node[j].max))
node[i].max = node[i].z + node[j].max;
}
max = max > node[i].max ? max : node[i].max;
}
printf("Case %d: maximum height = %d\n", cas++, max);
}
return 0;
}
相关文章推荐
- HDU1069:Monkey and Banana(最长上升子序列的应用)
- hdu 1069 monkey and banana(最长下降子序列)
- 动态规划1:H - Monkey and Banana(最长非上升子序列)
- HDU Monkey and Banana 1069 dp 动态规划 最长递增子序列
- hdu 1069 Monkey and Banana(dp 最长上升子序列)
- HDU 1069 Monkey and Banana(dp最长上升子序列)
- HDU1069 Monkey and Banana(dp动态规划,最长非递减子序列变形题)
- HDU 1069 Monkey and Banana 最长上升子序列模板
- HDU 1069 Monkey and Banana(最长递减子序列)
- 杭电oj 1069 Monkey and Banana 最长递增子序列
- (hdu step 3.2.6)Monkey and Banana(在第一关键字有序的情况下,根据第二关键字求最长上升子序列的高度之和)
- HDU 1069 Monkey and Banana (最长上升子序列)
- hdu 1069 Monkey and Banana (最长上升子序列)
- Monkey and Banana(LIS最长上升子序列)
- HDU 1069 Monkey and Banana(LIS最长上升子序列)
- HDU 1069 Monkey and Banana (dp, 最长上升子序列)
- HDU1069 Monkey and Banana(动态规划,单调最长递减子序列)
- hdu 1069 Monkey and Banana--最长递增子序列
- (DP,最长上升子序列变形)Monkey and Banana--HDOJ
- HDU - 1096 - Monkey and Banana(最长上升子序列)