wonder!
查看原帖
wonder!
766675
da_ke楼主2023/7/24 22:08
#include <bits/stdc++.h>

using namespace std;

#define rep(i,l,r) for(int i=l;i<=r;i++)
// #define int long long
const int INF = 1 << 30;

int n;
int x[100],y[100],z[100];
int mem[100];bool vis[100];

/*
k=1,xy ab
k=2,yz bc
k=3,xz ac
*/

pair<int,int> cs(int a,int b,int c,int k){
    if(k==1)
        return make_pair(a,b);
    if(k==2)
        return make_pair(b,c);
    if(k==3)
        return make_pair(a,c);
}

int height(int a,int b,int c,int k){
    if(k==1) return c;
    if(k==2) return a;
    if(k==3) return b;
}

int dfs(int d,int k){
    int& ans=mem[d];
    if(vis[d])
        return ans;
    for(int i=1;i<=n;++i)
        for(int m=1;m<=3;++m){
            pair<int,int> w;
            pair<int,int> u;
            u=cs(x[i],y[i],z[i],m);
            w=cs(x[d],y[d],z[d],k);
            if(w.first>u.first&&w.second>u.second)
                ans=max(ans,height(x[i],y[i],z[i],m)+dfs(i,m));
            else
                ans=max(ans,height(x[i],y[i],z[i],m));
        }
    vis[d]=1;
    return ans;
}

signed main(){
    ios::sync_with_stdio(false);
    int kase=0;
    while(cin>>n){
        ++kase;
        if(n==0) break;
        memset(x,0,sizeof(x));
        memset(y,0,sizeof(y));
        memset(z,0,sizeof(z));
        memset(mem,-1,sizeof(mem));
        memset(vis,0,sizeof(vis));
        
        x[0]=y[0]=z[0]=INF;
        rep(i,1,n)
            cin>>x[i]>>y[i]>>z[i];
        printf("Case %d: maximum height = %d\n",kase,dfs(0,1));
    }
}

样例没过

2023/7/24 22:08
加载中...