题目描述
积木对于大家来说应该很熟悉,我们可以用积木搭建出各种各样的模型,不同的人搭建出来的模型也会不一样。这不,小卡卡西正在和一群小伙伴玩积木呢! 铁人老师看见小朋友们在玩积木,就给大家出了一个难题:给定一些方形的积木,积木的三维尺寸分别为正整数 Xi,Yi,Zi,每一种积木都可以认为是无限多个。并且在搭建过程中约定如下条件:
输入
第一行一个数 N,表示不同积木的种数(N<=1000) 以下 N行,每一行描述一种积木。 Xi、Yi、Zi(<=100)分别为三边的长度
输出
一行一个数 M,表示在给定的条件下能搭建的最高模型 的高度。
样例输入
1
10 20 30
样例输出
40
#include<bits/stdc++.h>
using namespace std;
int n,i,j,f[3009];
struct stu{
int a;
int b;
int c;
}a[3009];
bool cmp(stu a,stu b){
return a.a>b.a;
}
int main()
{
cin>>n;
for(i=1;i<=n;i++){
cin>>a[i].a>>a[i].b>>a[i].c;
a[n+i].a=a[i].b;
a[n+i].b=a[i].c;
a[n+i].c=a[i].a;
a[2*n+i].a=a[i].c;
a[2*n+i].b=a[i].a;
a[2*n+i].c=a[i].b;
}
n=n*3;
for(i=1;i<=n;i++)
if(a[i].a>a[i].b)swap(a[i].a,a[i].b);
sort(a+1,a+1+n,cmp);
f[1]=a[1].c;
for(i=2;i<=n;i++){
f[i]=a[i].c;
for(j=1;j<=i-1;j++)
if(a[j].a>a[i].a&&a[j].b>a[i].b)
f[i]=max(f[i],f[j]+a[i].c);
}
for(i=1;i<=n;i++){
f[i]=max(f[i],f[i+1]);
cout<<f[n];
}
return 0;
}
80分WA,求大佬指教