Shirlies
宁静专注认真的程序媛~

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1069

这一题够折磨人,这一题难度在dp中只是1难度值,害惨我了,不过也学到了不少东西

#include <iostream>
#include "algorithm"
using namespace std;

struct blocks
{
 int x,y,z;
}jm[3*31];

int dp[3*31];

bool cmp(blocks a,blocks b)//这个sort排序要用到的东西,起初我是用指针的,汗,错死我了,我在想我到底应该怎样解决这类问题啊,找不到问题,思路又没有问题,在一边干着急,汗汗汗~~~走过路过别忘了帮忙解决一下这类问题啊……还是南柯帮得忙啊~~~谢谢你啦^_^
{
 if(a.x<b.x && a.y<b.y || a.x*a.y<b.x*b.y)
  return 0;
 else
  return 1;
}

int main()
{
 int n,m;
 int i,j,xx,yy,zz,temp,count=1,max;

 while(scanf("%d",&n),n)
 {
  i=0;
  m=n;
  while(m--)
  {
   scanf("%d%d%d",&xx,&yy,&zz);
   jm[i].x=xx;
   jm[i].y=yy;
   jm[i].z=zz;
   if(jm[i].x>jm[i].y)
   {
    temp=jm[i].x;
    jm[i].x=jm[i].y;
    jm[i].y=temp;
   }
   
   i++;
   jm[i].x=yy;
   jm[i].y=zz;
   jm[i].z=xx;
   if(jm[i].x>jm[i].y)
   {
    temp=jm[i].x;
    jm[i].x=jm[i].y;
    jm[i].y=temp;
   }
   
   i++;
   jm[i].x=xx;
   jm[i].y=zz;
   jm[i].z=yy;
   if(jm[i].x>jm[i].y)
   {
    temp=jm[i].x;
    jm[i].x=jm[i].y;
    jm[i].y=temp;
   }
   
   i++;
  }
  n*=3;
  sort(jm,jm+n,cmp);
        
  for(i=0;i<n;i++)//dp最长子序列之和问题了
  {
   dp[i]=jm[i].z;
  }

  for(i=0;i<n;i++)
  {
            max=dp[i];
   for(j=0;j<i;j++)
   {
    if(jm[i].x<jm[j].x&&jm[i].y<jm[j].y)
    {
                    if(max<dp[j]+jm[i].z)
        max=dp[j]+jm[i].z;
                   }
   }
   dp[i]=max;
  }
  max=0;
  for(i=0;i<n;i++)
  {
         if(max<dp[i])
         max=dp[i];
         }
  
     printf("Case %d: maximum height = %d\n",count++,max);
 }
 return 0;
}

起初用的是qsort()排的序,不知道哪里出问题了,还是南柯提醒我用sort()的,但是关键是我现在还是不知道qsort()怎么用(用的只是一些关于它的基础,最简单的,一复杂就不会用了),救命啊~~~

posted on 2011-12-08 20:51  Shirlies  阅读(426)  评论(0编辑  收藏  举报