#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define maxn 1010
#define LL __int64
using namespace std;
int n;
LL dp[maxn];
struct node
{
LL a,b,c,d;
};
node p[maxn];
bool cmp(node x,node y)
{
if(x.a!=y.a)
return x.a<y.a;
if(x.b!=y.b)
return x.b<y.b;
return x.d>y.d;//优先考虑限制条件多的
}
void solve()
{
int i,j;
for(i=1;i<=n;i++)
{
dp[i]=p[i].c;
for(j=1;j<i;j++)
{
if(p[i].d==0)
{
if(p[i].a>=p[j].a && p[i].b>=p[j].b)
if(dp[i]<dp[j]+p[i].c)
dp[i]=dp[j]+p[i].c;
}
if(p[i].d==1)
{
if((p[i].a>=p[j].a && p[i].b>p[j].b) || (p[i].a>p[j].a && p[i].b>=p[j].b))
if(dp[i]<dp[j]+p[i].c)
dp[i]=dp[j]+p[i].c;
}
if(p[i].d==2)
{
if(p[i].a>p[j].a && p[i].b>p[j].b)
if(dp[i]<dp[j]+p[i].c)
dp[i]=dp[j]+p[i].c;
}
}
}
}
int main()
{
int i;
while(scanf("%d",&n)!=EOF && n)
{
memset(dp,0,sizeof(dp));
for(i=1;i<=n;i++)
{
scanf("%I64d%I64d%I64d%I64d",&p[i].a,&p[i].b,&p[i].c,&p[i].d);
if(p[i].a>p[i].b)
{
int t;
t=p[i].a;
p[i].a=p[i].b;
p[i].b=t;
}
}
sort(p+1,p+1+n,cmp);
solve();
LL ans=0;
for(i=1;i<=n;i++)
ans=max(ans,dp[i]);
printf("%I64d\n",ans);
}
return 0;
}
hdu 4001 To Miss Our Children Time
最新推荐文章于 2017-01-28 13:40:25 发布