蒟蒻求助
查看原帖
蒟蒻求助
218223
chenxsir楼主2020/5/7 13:47

蒟蒻求助
感觉没问题啊

#include<iostream>
#include<algorithm>
#include<queue>
#include<cstring>
using namespace std;
int n,ans;
const int MAXN=95;
int cbe[MAXN][3],g[MAXN][MAXN],dis[MAXN],fa[MAXN],book[MAXN],T;
int main()
{
 while(scanf("%d",&n)&&n)
    {
        T++;
        memset(cbe,0,sizeof cbe);
        memset(g,0,sizeof g);
        memset(dis,0,sizeof dis);
        memset(fa,0,sizeof fa);
        memset(book,0,sizeof book);
        ans=0;
        for(int i=1;i<=n;i++)
        {
            scanf("%d%d%d",&cbe[i][0],&cbe[i][1],&cbe[i][2]);
            sort(cbe[i],cbe[i]+3);
            cbe[i+n][1]=cbe[i][2];cbe[i+n][2]=cbe[i][1];
            cbe[i+2*n][0]=cbe[i][1];cbe[i+2*n][1]=cbe[i][2];
            cbe[i+2*n][2]=cbe[i][0];
        }
        n*=3;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
            {
                if(cbe[j][0]<cbe[i][0]&&cbe[j][1]<cbe[i][1])
                { g[i][j]=1; fa[j]++;}
            }
        for(int i=1;i<=n;i++)
        {
            if(fa[i]==0)
            {
                dis[i]=cbe[i][2];
                //cout<<i<<endl;
            }
        }
        int pd=0;
        for(int k=0;;k=0)
        {
        for(int i=1;i<=n;i++)
        {
            //cout<<"cc";
            if(fa[i]==0&&book[i]==0)
            {
                for(int j=1;j<=n;j++) if(g[i][j])
                {
                    //cout<<"aa"<<endl;
                    dis[j]=max(dis[j],dis[i]+cbe[j][2]);
                    fa[j]--;
                    k=1;
                }
                book[i]=1;
            }
        }
        if(k==0)break;
        }
        for(int i=1;i<=n;i++)ans=max(ans,dis[i]);
        printf("Case %d: maximum height = %d\n",T,ans);
    }
    return 0;
}
2020/5/7 13:47
加载中...