1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
const int Maxn=1005; const int INF=0x3f3f3f3f; typedef long long ll; struct { int a,b,c,d; bool operator <(const node &tp)const { if(a==tp.a) { if(b==tp.b) return d>tp.d; return b<tp.b; } return a<tp.a; } }blo[Maxn]; int n; ll dp[Maxn]; int main() { while(scanf("%d",&n) && n) { for(int i=1;i<=n;i++){ scanf("%d%d%d%d",&blo[i].a,&blo[i].b,&blo[i].c,&blo[i].d); if(blo[i].a<blo[i].b) std::swap(blo[i].a,blo[i].b); } std::sort(blo+1,blo+n+1); for(int i=1;i<=n;i++) { dp[i]=blo[i].c; for(int j=1;j<i;j++) { if(blo[i].d==0) { if(blo[i].a>=blo[j].a && blo[i].b>=blo[j].b) dp[i]=std::max(dp[i],dp[j]+blo[i].c); } else if(blo[i].d==1) { if(blo[i].a>=blo[j].a && blo[i].b>=blo[j].b && (blo[i].a>blo[j].a||blo[i].b>blo[j].b)){ dp[i] = std::max(dp[j]+blo[i].c, dp[i]); } } else { if(blo[i].a>blo[j].a && blo[i].b>blo[j].b) dp[i]=std::max(dp[i],dp[j]+blo[i].c); } } } ll ans=0; for(int i=1;i<=n;i++) ans=std::max(ans,dp[i]); printf("%I64dn",ans); } return 0; }
|
近期评论