找回密码
 立即注册
首页 业界区 业界 SP100 BABTWR - Tower of Babylon

SP100 BABTWR - Tower of Babylon

赏勿 2 小时前
传送门
题目思路

先预处理不同的边长作为高的立方体,共 \(3*n\) 种情况。
Q: 为什么不是 \(6*n\) 种情况呢?
A: 貌似也可以这么做,但是再判断块的放置时,长和宽互换没有影响,所以没有必要打 \(6\) 种。
再建图。如果块 \(A\) 可以放在块 \(B\) 上,就建一条 \(A\) 指向 \(B\) 的边,边权为 \(B\) 的高。
最后建一个超级源点,指向其他所有点上。
问题就转化成如何选择可以使边权最大。由于 \(n\le3\),可以把边权取负,跑一次 Floyd 即可。输出答案时不要忘记再取负一次。
AC Code

[code]#include#define int long longusing namespace std;const int N=50;struct node{        int x,y,z;}a[N*3];int n,g[N*3][N*3];void solve(){        memset(g,0x3f,sizeof(g));        int ans=g[0][0];        for(int i=1,u,v,w;i>u>>v>>w;                a={u,v,w};                a[i+n]={u,w,v};                a[i+n*2]={v,w,u};        }        for(int i=1;i

相关推荐

您需要登录后才可以回帖 登录 | 立即注册