UVA 437 The Tower of Babylon (DAG上的无源最长路 or LIS)

题目大意

有n种长宽高为x,y,z的砖头,每种都有无数个。

砖头可以用不同姿势的方向来盖。

砖头a以某种姿势可以盖在砖头b上,当且仅当a的底部的长宽都要比b的底部长宽要小。

问最高可以建多高?


思路:按图论的最长路dp也可,用 LIS也可以也就相当于把DAG拓扑排序了一下
//0 KB 19 ms
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct node{int a,b,h;}block[100];
int n;
int dp[100];
void add_block(int x,int a,int b,int h)
{
    block[x].a=a;
    block[x].b=b;
    block[x].h=h;
}
bool ok(int x,int y)
{
    if(block[x].a>block[y].a&&block[x].b>block[y].b) return true;
    if(block[x].b>block[y].a&&block[x].a>block[y].b) return true;
    return false;
}
int memrize(int x)
{
    int &ans=dp[x];
    if(ans>0) return ans;
    ans=block[x].h;
    for(int i=1;i<=3*n;i++){
        if(ok(x,i)) ans=max(ans,memrize(i)+block[x].h);
    }
    return ans;
}
void print(int x){ //调试检验打印方案
    printf("(%d %d %d)\n",block[x].a,block[x].b,block[x].h);
    for(int i=1;i<=3*n;i++) if(ok(x,i)&&dp[x]==dp[i]+block[x].h) {
        print(i);
        break;
    }
}
int main()
{
    int cnt=0;
    while(scanf("%d",&n),n){
        int a,b,c;
        for(int i=1;i<=n;i++){
            scanf("%d%d%d",&a,&b,&c);
            add_block(i,a,b,c);
            add_block(i+n,a,c,b);
            add_block(i+2*n,b,c,a);
        }
        int ans=-(1<<30);
        memset(dp,-1,sizeof(dp));
        for(int i=1;i<=3*n;i++)
            ans=max(ans,memrize(i));
        printf("Case %d: maximum height = %d\n",++cnt,ans);
    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Babylon.js 中,你可以使用 GUI (Graphical User Interface) 库来创建用户界面,并在其中播放视频。下面是一个简单的示例代码,展示了如何在 Babylon.js 的 GUI 上播放视频: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Babylon.js GUI Video Playback</title> <style> canvas { width: 100%; height: 100%; } </style> </head> <body> <canvas id="renderCanvas"></canvas> <script src="https://cdn.babylonjs.com/babylon.js"></script> <script src="https://cdn.babylonjs.com/loaders/babylonjs.loaders.min.js"></script> <script src="https://cdn.babylonjs.com/gui/babylon.gui.min.js"></script> <script> // 创建 Babylon.js 场景和引擎 var canvas = document.getElementById("renderCanvas"); var engine = new BABYLON.Engine(canvas, true); var scene = new BABYLON.Scene(engine); // 创建 GUI var gui = BABYLON.GUI.AdvancedDynamicTexture.CreateFullscreenUI("UI"); // 创建视频纹理 var videoTexture = new BABYLON.VideoTexture("video", "path/to/video.mp4", scene, true); // 创建视频控件 var videoControl = new BABYLON.GUI.VideoTextureControl(); videoControl.videoTexture = videoTexture; videoControl.width = "100%"; videoControl.height = "100%"; // 将视频控件添加到 GUI gui.addControl(videoControl); // 渲染场景 engine.runRenderLoop(function () { scene.render(); }); // 处理窗口调整大小事件 window.addEventListener("resize", function () { engine.resize(); }); </script> </body> </html> ``` 在上述代码中,我们首先创建了一个 Babylon.js 场景和引擎。然后,使用 `BABYLON.GUI.AdvancedDynamicTexture.CreateFullscreenUI()` 创建了一个全屏的 GUI。接下来,使用 `BABYLON.VideoTexture()` 创建了一个视频纹理,并指定视频的径。然后,创建了一个视频控件 `BABYLON.GUI.VideoTextureControl()`,将视频纹理赋值给它,并设置其宽度和高度为全屏。最后,使用 `gui.addControl()` 将视频控件添加到 GUI 中。 请确保将 `"path/to/video.mp4"` 替换为实际视频文件的径。 以上代码将在画布上创建一个全屏的 Babylon.js 场景,并在其中播放指定径的视频。你可以根据需要自定义 GUI 的样式和布局。 注意:由于浏览器的限制,视频的自动播放可能需要用户与页面进行了交互。如果视频无法自动播放,请确保用户已与页面进行了交互。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值