The 36th ACM/ICPC Asia Regional Dalian Site —— Online Contest hdu4001

  #include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
struct block
{
  long long a,b,c,d;
}blocks[1010];

long long dp[1010];
/*
__int64 max(__int64 a,__int64 b)
{
  if(a>b)
    return a;
  else return b;
  }*/

bool cmp(block aa,block bb)
{
  return ((aa.a<bb.a)||
          ((aa.a==bb.a)&&(aa.b<bb.b))||
          ((aa.a==bb.a)&&(aa.b==bb.b)&&(aa.d>bb.d)));
}

int main()
{
  int n;
  //  int t;
  long long t;
  while(scanf("%d",&n)!=EOF)
    {
      if(n==0) break;
   memset(dp,0,sizeof(dp));
  for(int i=0;i<n;i++)
    {
      cin>>blocks[i].a>>blocks[i].b>>blocks[i].c>>blocks[i].d;
        if(blocks[i].a<blocks[i].b)
          {
            t=blocks[i].a;
            blocks[i].a=blocks[i].b;
            blocks[i].b=t;
          }
    }
  sort(blocks,blocks+n,cmp);
  for(int i=0;i<n;i++)
    {
      dp[i]=blocks[i].c;
    }
  for(int i=1;i<n;i++)
    {
      if(blocks[i].d==0)
        {
          for(int j=0;j<i;j++)
            {
              if(blocks[j].a<=blocks[i].a && blocks[j].b<=blocks[i].b)
                if(dp[j]+blocks[i].c>dp[i])
                {
                  dp[i]=dp[j]+blocks[i].c;
                }
            }
        }
      else if(blocks[i].d==1)
        {
          for(int j=0;j<i;j++)
            {
              if(blocks[j].a<=blocks[i].a && blocks[j].b<=blocks[i].b && blocks[j].a*blocks[j].b<blocks[i].a*blocks[i].b)
                if(dp[j]+blocks[i].c>dp[i])
                  {
                    dp[i]=dp[j]+blocks[i].c;
                  }
            }
        }
      else if(blocks[i].d==2)
        {
          for(int j=0;j<i;j++)
            {
              if(blocks[j].a<blocks[i].a && blocks[j].b<blocks[i].b)
                if(dp[j]+blocks[i].c>dp[i])
                  {
                    dp[i]=dp[j]+blocks[i].c;
                  }
            }
        }
    }
      long long sum=dp[0];
      for(int i=1;i<n;i++)
        {
          if(dp[i]>sum)
            sum=dp[i];
        }
      //printf("%lldd\n",sum);
        cout<<sum<<endl;
    }
      return 0;
}


你可能感兴趣的:(c,ini)