input:brick.in output:brick.out
时间限制:
1000 ms 空间限制: 128000 KB 具体限制
1 #include<bits/stdc++.h> 2 using namespace std; 3 struct Node{ 4 int w,l,h; 5 }a[10001]; 6 bool bdx(Node c,Node d) 7 { 8 return c.l<d.l; 9 } 10 int main() 11 { 12 freopen("brick.in","r",stdin); 13 freopen("brick.out","w",stdout); 14 int n,f[10001],ans; 15 cin>>n; 16 int o,p,q; 17 for(int i=1;i<=n;i++) 18 { 19 cin>>o>>p>>q; 20 a[i].l=max(o,p);a[i].w=min(o,p);a[i].h=q; 21 a[i+n].l=max(o,q);a[i+n].w=min(o,q);a[i+n].h=p; 22 a[i+2*n].l=max(p,q);a[i+2*n].w=min(p,q);a[i+2*n].h=o; 23 } 24 sort(a+1,a+3*n+1,bdx); 25 for(int i=1;i<=3*n;i++) 26 f[i]=a[i].h; 27 for(register int i=3*n;i>=1;i--) 28 for(register int j=i+1;j<=3*n;j++) 29 if(a[i].w<a[j].w && a[i].l != a[j].l) 30 f[i]=max(f[j]+a[i].h,f[i]); 31 for(int i=1;i<=3*n;i++) 32 ans=max(ans,f[i]); 33 cout<<ans; 34 }