zoj1093

  唉唉,这题没有想出来算法,然后针对别人的代码看了好长时间,又举例写了,然后根据理解用自己的风格写出来了代码!

#include<stdio.h>

#include<stdlib.h>
struct fun
{int area;
int high;
int x,y;
}a[90];
int cmp2(const void *a,const void *b)
{
return *(int *)b-*(int *)a;
}
int cmp(const void *a,const void *b)
{
struct fun *d=(struct fun *)a;
struct fun *c=(struct fun *)b;
if(c->area!=d->area)
return c->area-d->area;
else if(c->x!=d->x)
return c->x-d->x;
else if(c->y!=c->y)
return c->y-d->y;
}
int main()
{
int n,i,s,r,t,j=0,max[91],k,p=0;
while(scanf("%d",&n)&&n)
{
p++;
for(i=0;i<3*n;i=i+3)
{
scanf("%d%d%d",&s,&r,&t);
a[i].area=s*r;a[i].x=s;a[i].y=r;a[i].high=t;
a[i+1].area=s*t;a[i+1].x=s;a[i+1].y=t;a[i+1].high=r;
a[i+2].area=t*r;a[i+2].x=t;a[i+2].y=r;a[i+2].high=s;
} //输入矩形对应的长宽高,并且求出面积都放在结构题里面
for(i=0;i<3*n;i++)
qsort(&a[i].x,2,sizeof(a[i].x),cmp2); //对每个结构体数组中的地面的长宽进行降序排列
qsort(a,n*3,sizeof(struct fun),cmp); //针对面积进行降序排列
for(i=0;i<3*n;i++)
{
max[i]=a[i].high;//针对每一个面积记录下它的高
}
for(i=3*n-1;i>=0;i--)
{
k=0;
for(j=3*n-1;j>i;j--)//按照从低向高的遍历规则,这对i对j进行遍历,记录满足题意的最高值,然后再次加上到原来的高
{
if((a[i].x>a[j].x)&&(a[i].y>a[j].y)&&(k<max[j]))
k=max[j];
}
max[i]=max[i]+k;
}
k=0;
for(i=0;i<3*n;i++)//遍历找到最高值然后输出
if(k<max[i])
k=max[i];

printf("Case %d: maximum height = %d\n",p,k);
}
return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淡定的小Y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值