因为太菜了只能想到二维的dp数组
#include <iostream>
using namespace std;
typedef long long ll;
const int N = 100 + 5;
int n;
int a[N], b[N], c[N];
int f[N][3];
void solve(int at[], int bt[], int ct[], int i, int j, int h)
{
if((at[i] > a[j] && bt[i] > b[j]) || (at[i] > b[j] && bt[i] > a[j]))
f[i][h] = max(f[i][h], f[j][2] + ct[i]);
if((at[i] > a[j] && bt[i] > c[j]) || (bt[i] > a[j] && at[i] > c[j]))
f[i][h] = max(f[i][h], f[j][1] + ct[i]);
if((at[i] > b[j] && bt[i] > c[j]) || (at[i] > c[j] && bt[i] > b[j]))
f[i][h] = max(f[i][h], f[j][0] + ct[i]);
}
int main(void)
{
while(cin >> n && n)
{
for(int i = 1; i <= n; i++)
cin >> a[i] >> b[i] >> c[i];
for(int i = 1; i <= n; i++)
{
f[i][0] = a[i];
f[i][1] = b[i];
f[i][2] = c[i];
for(int j = 1; j < i; j++)
{
solve(a, b, c, i, j, 2);
solve(a, c, b, i, j, 1);
solve(b, c, a, i, j, 0);
}
}
int ans = 0;
for(int i = 1; i <= n; i++)
{
ans = max(f[i][0], ans);
ans = max(f[i][1], ans);
ans = max(f[i][2], ans);
}
cout << ans << endl;
}
return 0;
}