[UVA 103] Stacking Boxes

自制JS某课脚本 根据实际需求自制网页讯网刷题脚本,绕过人脸,弹窗,答题,实现自动化运行 阅读详情

  1. 本题目实际上是求DAG上的最长路径。因为盒子之间的嵌套关系是二元关系。而二元关系可以用图模型来建模。例如,盒子a可以嵌套在盒子b中,那么在图模型中就是a和b之间有一条从a到b的有向边。注意到这个有向图是无环的,因为盒子不能直接或间接的嵌套入自己本身。所以建模所得的图是有向无环图DAG。根据题意,只需要对盒子的每个维度进行一次排序,然后判断一个盒子的从小到大的所有维度是否小于另一个盒子的对应维度即可判断这两个盒子是否存在嵌套关系。图在程序中的存储模型使用的是邻接矩阵。算法使用的思想是动态规划。设d(i)表示的是以第i个盒子为嵌套序列尾的该序列长度。则状态转移方程为:d(i) = max{ d(j) + 1 | (j,i)∈E, E为图的有向边集 }。实际实现的时候使用了记忆化的方法。预先定义一个数组d并每一项初始化为0,然后递归调用dp函数来计算。由于当数组d中的元素大于零时,即表示当前的状态已经计算完毕,此时直接返回该值。这样做,有效减少了因不断求解公共子问题所带来的巨大工作量。最后,定义递归函数print_box将所求最大的序列中的盒子序号从前往后输出出来。print_box的算法如下:先搜索可以嵌套入当前盒子cur的盒子j,如果以盒子cur为嵌套序列尾的序列长度是由以盒子j为嵌套序列尾的序列长度计算得来的,那么则打印以盒子j为嵌套序列尾的序列中的盒子(递归),最后再打印当前盒子cur。其实此处可以通过多申请一个parent数组,记录每一个d[i]是由哪一个计算得到的话,可以不用进行邻接矩阵的遍历(空间换时间)。主流程算法:对输入的盒子的维度进行与排序,然后计算以每个盒子为嵌套序列尾的该序列长度,选取最大的一个即可。
  2. 代码如下:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define MAX 40
    #define DIM 20
    int d[MAX];
    int in[MAX][DIM];
    int graph[MAX][MAX];
    
    int cmp(const void *_a,const void *_b)
    {
        int *a = (int *)_a;
        int *b = (int *)_b;
        return *a<*b?-1:*a>*b?1:0;
    }
    
    bool isNested(int *ba,int *bb,int n)
    {
         int i;
         for(i = 1;i <= n;i++)
             if(ba[i] >= bb[i])
                return false;
         return true;
    }
    
    int dp(int cur,int k)
    {
        int& ans = d[cur];
        if(ans > 0)
           return ans;
        ans = 1;
        for(int j = 1;j <= k;j++)
        {
            if(graph[j][cur])
            {
               ans = ans<dp(j,k)+1?dp(j,k)+1:ans;
            }
        }
        return ans;
    }
    
    void print_box(int cur,int k)
    {
         int j;
         for(j = 1;j <= k;j++)
         {
             if(graph[j][cur] && d[cur] == d[j] + 1)
             {
                print_box(j,k);
                break;
             }
         }
            printf("%d ",cur);
    }
    
    int main()
    {
        int k,n,i,j,max,max_idx;
        while(scanf("%d %d",&k,&n) != EOF)
        {
              for(i = 1;i <= k;i++)
              {
                  for(j = 1;j <= n;j++)
                  {
                      scanf("%d",&in[i][j]);  
                  }
                  qsort(in[i],n+1,sizeof(int),cmp);
              }
              for(i = 1;i <= k;i++)
              {
                  for(j = 1;j <= k;j++)
                  {
                      if(isNested(in[i],in[j],n))
                         graph[i][j] = 1;
                      else
                         graph[i][j] = 0;
                  }
              }
              memset(d,0,sizeof(d));
              max = 0;
              for(i = 1;i <= k;i++)
              {
                  if(max < dp(i,k))
                  {
                     max = dp(i,k);
                     max_idx = i;
                  }
              }
              printf("%d\n",max);
              print_box(max_idx,k);
              printf("\n");
        }
        return 0;
    }
    

数据讲述中国故事!和鲸助力中国综合社会调查(CGSS)数据分析与可视化大赛圆满收官 用数据研究中国问题、总结中国道路、讲述中国故事。和鲸作为协办单位全程支持本次大赛,为中国人民大学中国调查与数据中心实施全套赛事系统,同时提供完备而周全的赛事运营服务。 阅读详情

相关推荐

SV--对象拷贝、参数化的类

对象拷贝,参数化的类

创芯人--fly的博客 1570

[动态规划]UVA103 - Stacking Boxes

题意: 在数学或电脑科学里,有些概念在一维或二维时还蛮简单的,但到N维就会显得非常复杂。试想一个 n维的「盒子」:在二维空间里,盒子( 2 , 3 )可代表一个长为2个单位,宽为3个单位的盒子;在三维空间里,盒子( 4 , 8 , 9 )则是一个4*8*9(长、宽、高)的盒子。至于在六维空间里,也许我们不清楚( 4 , 5 , 6 , 7 , 8 , 9 )长得怎样,不过我们还是可以分析这些盒子的特性。 在此问题里,我们要算出一组n维盒子里,它们的「最长套入串列」: b 1 , b 2 , ......,b

九问的烦恼 1812

FCKeditor 2.6.4 php版本任意文件上传——漏洞复现

一、漏洞描述 FCKeditor是目前最优秀的可见即可得网页编辑器之一,它采用JavaScript编写。具备功能强大、配置容易、跨浏览器、支持多种编程语言、开源等特点。它非常流行,互联网上很容易找到相关技术文档,国内许多Web项目和大型网站均采用了FCKeditor。 Fckeditor 低于 2.6.4 php 版本任意文件上传漏洞,当您的PHP环境配置为 GPC = Off 时可绕过currentfolder参数过滤上传脚本木马控制网站服务器 二、漏洞原理 漏洞版本:<=2.6.4 三、环境搭建

W小哥 1万+

UVa 103 - Stacking Boxes

题目:给你一些n维的盒子,问最多能套多少个在一起。 分析:dp,lis,最大上升子序列,贪心。             因为,对于两个盒子来说,维度按照递增序嵌套时是最大嵌套可能(可归纳证明);            (1维显然成立;k维到k+1维最多2个维度不同,他们都按递增序有最大嵌套可能)             所以,每个盒子内部维度排序后,整体排序计算lis即可。 说明:见到一

小白菜又菜 1445

ResNet理论基础与具体实现(详细教程)

论文地址:Deep Residual Learning for Image Recognition ​ Identity Mappings in Deep Residual Networks pytroch源码地址:resnet 0x00 前言 ResNet是2015年就提出的网络结构,中文名字叫作深度残差网络,主要作用是图像分类。现在在图像分割、目标检测等领域都有很...

coordinate的博客 8332

Matlab+Matpower实战:手把手教你生成IEEE14节点FDIA攻击数据集(附完整代码)

本文提供了一份基于Matlab与Matpower工具构建IEEE14节点FDIA攻击数据集的完整实战指南。通过动态负荷数据模拟、潮流计算、状态估计及隐蔽攻击向量注入,手把手教你生成可用于电力系统网络安全研究的仿真数据集,并附有核心代码与调试技巧。

bean的博客 399

acm动态规划之最长路问题---UVA103stocking boxes做题报告

UVA103Stacking Boxes 在这个问题中,你要分析一组n维盒子的某个性质。你要确定出盒子的最长嵌套串,也就是说一系列的盒子b1、b2、……、bk,一个套一个,使所有的bi都嵌套在bi+1内。 对于一个盒子D = (d1, d2, ..., dn)和另一个盒子E = (e1, e2, ..., en),如果存在一种di的排列,使重排的每个维度的值都小于盒子E中对应维度的值,则...

weixin_30685029的博客 140

SWAT模型参数太多搞不定?一篇讲清如何用SWAT-CUP筛选关键敏感参数(含结果图解读)

本文详细解析了如何使用SWAT-CUP进行参数敏感性分析,帮助水文模型初学者从上百个参数中筛选出关键敏感参数。通过实际案例和结果图解读,介绍了敏感性分析的核心价值、SWAT-CUP结果界面解读方法以及参数筛选的四步实战法,显著提升模型调试效率。文章还提供了典型问题排查手册,解决敏感参数与文献不一致、率定后模型变差等常见问题。

weixin_30385925的博客 321

Stacking Boxes

UVA  103  问题描述  Stacking Boxes  Background Some concepts in Mathematics and Computer Science are simple in one or two dimensions but become more complex when extended to arbi

我是会娶刘亦菲的 650

网络摄像头(IPC)介绍:类型、供电、镜头、夜视等

IPC(Internet Protocol Camera,网络摄像头),它是一种由传统摄像机与网络技术结合所产生的新一代摄像机。它可以将视频、音频、报警及控制信号通过网络传输,接受网络监控主机(NVR或监控管理平台)的管理。IPC可与路由器、交换机、NVR等设备组建成为监控系统。

学无止境,Fighting! 1万+

PyTorch深度学习实战(25)——从零开始实现Mask R-CNN实例分割

Mask R-CNN 是一种在目标检测任务中引入了语义分割的强大框架,通过在 Faster R-CNN 基础上进行扩展,添加了额外的分支网络,不仅可以准确地检测对象的位置和类别,还可以生成每个实例的精确像素级别的语义分割掩码。其模块化的设计可以轻松地应用于不同的任务和数据集,并且可以通过添加更多的分支进行功能扩展,如实例关键点检测等。

盼小辉丶的博客 1万+

UVA - 103 Stacking Boxes

#include #include #include #include #include #include #include #include #include #include using namespace std; int head[50]; int tail; int dis[50]; struct Edge { int to,next; }edge[1000]; void add(in

Last Order 1075

手把手教你学AI GPU UMD驱动软件开发专栏--1.1 UMD(用户模式驱动)的定义与定位

摘要:UMD(用户模式驱动)是GPU驱动架构中的关键组件,负责连接AI应用与硬件。作为运行在用户空间的动态链接库,UMD通过减少系统调用开销显著提升AI计算性能。其核心功能包括API转换、资源管理和命令生成,同时具备安全性高(崩溃不影响系统)、开发灵活等优势。随着AI发展,UMD已从图形驱动演变为深度学习加速的关键组件,支持TensorCore等硬件特性优化。未来趋势包括深度框架集成、硬件感知增强和虚拟化支持。UMD通过性能优化和安全隔离机制,成为现代AI计算基础设施的理想选择。

MHD0815的博客 171

UVa 103 Stacking Boxes

/* Author: ACboy Date: 2010-5-19 Result: AC Descripition: UVa 103 Stacking Boxes*/#include #include using namespace std;//邻接矩阵int g[40][40];//记录每条边int edg[35][15];//dp数组i

个人独立博客http://www.acb0y.cn/ 1221

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

uva103 - Stacking Boxes(DAG)

题目:uva103 - Stacking Boxes(DAG) 题目大意:给出N个boxes, 并且给出这些箱子的维度,要求找一个最长的序列,能够使得下面的箱子一定能够有个维度序列大于上面的那个箱子的维度序列。例如:A箱子(2 3 4),B箱子(3 4 5),因为有个序列2 3 4 , 3 4 5使得B每个维度的值都大于A,所以A可以在B上面 。 解题思路:DAG。将这些箱子哪

852

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

UVa Problem 103 - Stacking Boxes

// UVa Problem 103 - Stacking Boxes // Verdict: Accepted // Submission Date: 2011-10-17 // UVa Run Time: 0.012s // // 版权所有(C)2011,邱秋。metaphy

寂静山林 1058

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

uva 103 Stacking Boxes

类似最长上升子序列,但是这个大小关系并不是

呼,是出一口气;吸,是争一口气! 669

uva 103 Stacking Boxes

Background Some concepts in Mathematics and Computer Science are simple in one or two dimensions but become more complex when extended to arbitrary dimensions. Consider solving differential equations

rave..juine 1273

UVA 103 - Stacking Boxes

题目大意:               输入k个n维的东西(当n=2的时候看成框,n=3时看成方体,之后是超立方..),求 最大 的长度 使每个框可以在后一个中装下。输出最大值,和 顺序 (框从小到大,顺序指输入的顺序,从1开始到k)。题目类型:  dp。 DAG上的。分析:

tclh123 - 悲剧的泳裤王子 1219

uva 103 Stacking Boxes 动态规划

// // main.cpp // Calmeii // // Created by Calmeii on 14-5-5. // Copyright (c) 2014年 apple. All rights reserved. // #include #include #include using namespace std; #define MAXN 31 int G[MAXN]

Calmei的专栏 695

UVA - 103 - Stacking Boxes (动态规划)

UVA - 103 Stacking Boxes Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Submit Status Description Background Some concepts in Mathe

Never say never 773

UVa 103 - Stacking Boxes

【题目链接】 http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=114&page=show_problem&problem=39 【原题】  Stacking Boxes  Background Some concept

D_Double's Journey 2402

uva 103 Stacking Boxes

Stacking Boxes  Background Some concepts in Mathematics and Computer Science are simple in one ortwo dimensions butbecome more complex when extended to arbitrary dimensions. Considersolving

sunnykema的专栏 410
上一篇: [UVA 111] History Grading
ryancooper
博客等级 码龄18年 1粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值