hdu 1069

来源:互联网 发布:sql验证主键约束 编辑:程序博客网 时间:2024/05/16 05:28

//终于AC了,郁闷了好久
//其实是求最大递减子序列
//长方体要考虑三个面
#include<iostream>//2315666 2010-04-08 23:56:20 Accepted 1069 0MS 244K 1227 B C++ 悔惜晟
#include<cstdio>
#include<algorithm>
#include<string>
using namespace std;

struct stu
{
 int x;
 int y;
 int z;
}df[95];

int cmp(stu a, stu b)
{
 if(a.z != b.z )
  return a.z > b.z;
 else if(a.y == b.y)
  return a.x > b.x;
 else
  return a.y > b.y;
}

int main()
{
 int n, i, j, sum[95];
 int num[4];
 int t = 1;
 while(scanf("%d", &n) != EOF && n)
 {
  int k = 1;
  memset(df, 0, sizeof(df));
  for(i = 1; i <= n; i++)
  {
    scanf("%d %d %d", &num[0], &num[1], &num[2]);
   //abc(df[i].x, df[i].y, df[i].z);
   sort(num, num + 3);//这里处理很好
   df[k].x = num[0]; df[k].y = num[1]; df[k].z = num[2]; k++;
   df[k].x = num[1]; df[k].y = num[0]; df[k].z = num[2]; k++;
   df[k].x = num[2]; df[k].y = num[0]; df[k].z = num[1]; k++;

  }
  sort(&df[1], &df[1] + k, cmp);
  memset(sum, 0, sizeof(sum));
  int max1;
  int x;
  sum[1] = df[1].x;
  max1 = -11;
  for(i = 2; i < k; i++)
  {
   x = 0;//把这里赋值成x = -1了,就一直错
   for(j = 1; j < i; j++)
   {
        if(df[i].y < df[j].y && df[i].z < df[j].z && sum[j] > x)
     x = sum[j];
    
   }
   sum[i] = df[i].x + x;
   if(sum[i] > max1)
    max1 = sum[i];
   
  }
  
  printf("Case %d: maximum height = %d/n", t++, max1);
 }
}

原创粉丝点击