本文共 918 字,大约阅读时间需要 3 分钟。
这道题原来小白大哥讲过了(怎么感觉矛盾啊),按照他的思路,是把所有的箱子看成一个矩形,利用嵌套矩形来做,我把结构体中,所存x的值都不小于y的值,再把所有矩形按x的权值排序(降序),然后按照LIS的思想来做就可以了,不过d[i]里的权值不是长度,而是以a[i]为结束点时的总高度。。。
一个箱子可产生三个矩形(不用担心他们是一样的),并且每个矩形最多只会用到一次,所以我就把每个矩形存起来,再以长边排序,然后按照求LIS的思路解题,嗯,就是这了。。
#include#include #include #define STOP system("pause")typedef struct { int x; int y; int z;}NODE;NODE a[200];int max(int a,int b,int c){ int x=a; if(x b) x=b; if(x>c) x=c; return x;}int mid(int a,int b,int c){ return (a+b+c-max(a,b,c)-min(a,b,c));} int cmp(const void *a,const void *b) { return ((NODE*)a)->x < ((NODE*)b)->x ? 1 : -1; } int main(){ int i,j,n,p,t1,t2,t3,b1,b2,b3,d[200],len,k=1; while(scanf("%d",&n)&&n) { p=0; for(i=0;i a[i].x&&a[j].y>a[i].y&&(d[j]+a[i].z)>d[i]) d[i]=d[j]+a[i].z; } for(i=len=0;i
转载地址:http://rasfb.baihongyu.com/