UVA 437 DAG最长路

来源:互联网 发布:一采通采购软件 编辑:程序博客网 时间:2024/05/22 17:41
#include<cstring>#include<stdio.h>#include<iostream>#include <algorithm>using namespace std;#define MAX 105int n;int block[MAX][3];int d[MAX][3];void get_(int *v, int id, int k){int cnt = 0;for (int i = 0;i != 3;++i){if (i == k)continue;v[cnt++] = block[id][i];}}int dp(int id, int k){if (d[id][k] > 0)return d[id][k];d[id][k] = 0;int v1[2], v2[2];get_(v1, id, k);//计算编号id,高的编号为k的立方体作底上面最多可以放多高----d[id][k]for (int i = 0;i != n;++i)for (int j = 0;j != 3;++j){get_(v2, i, j);if (v1[0] > v2[0] && v1[1] > v2[1])d[id][k] = max(d[id][k], dp(i, j));}d[id][k] += block[id][k];//加上自身高度return d[id][k];}int main(){int casecnt = 0;while (cin >> n && n){for (int i = 0;i != n;++i){cin >> block[i][0] >> block[i][1] >> block[i][2];sort(block[i], block[i] + 3);}memset(d, 0, sizeof(d));int ans = 0;for (int i = 0;i != n;++i)for (int j = 0;j != 3;++j)ans = max(ans, dp(i, j));printf("Case %d: maximum height = %d\n", ++casecnt, ans);}return 0;}

0 0