当前位置: 首页 > article >正文

UVa 12117 ACM Puzzles

题目描述ACM\texttt{ACM}ACM儿童机器协会计划为儿童设计一种新型拼图。所有拼图的尺寸都是3×N3 \times N3×N并使用222222种特定的拼图块某些块可以重复使用。为了防止假冒产品ACM\texttt{ACM}ACM生产的拼图在出售时只会保留某些特定的解法。给定NNN0N20010 N 20010N2001计算使用给定拼图块可以组成多少种不同的解法。不允许旋转拼图块但每种块可以使用任意多次。有些块只是其他块的旋转版本但也不能通过旋转使其变成另一种块。输入格式输入文件包含多行每行一个整数NNN0N20010 N 20010N2001。输入以一行单独的000结束。输出格式对于每个NNN输出一行格式为Case k: ans其中answerSmod 1012answer S \mod 10^{12}answerSmod1012SSS是3×N3 \times N3×N拼图的解法总数。样例输入5 100 0样例输出Case 1: 26 Case 2: 584039302899题目分析问题本质这是一个铺砖问题Tiling Problem\texttt{Tiling Problem}Tiling Problem的变种用222222种给定的、不可旋转的拼图块填满3×N3 \times N3×N的矩形区域。由于NNN最大可达200020002000需要设计一个高效的动态规划算法。关键难点块形状复杂222222种块形状各异宽度可能是111、222或333列。不允许旋转即使某些块看起来是旋转对称的也被视为不同的块。大数取模结果需要对101210^{12}1012取模说明结果可能非常大。解题思路分析1. 状态定义观察到拼图块的宽度最多为333列我们可以采用列轮廓线动态规划的思路。定义状态为dp[i][p][q][r]dp[i][p][q][r]dp[i][p][q][r]表示已经填充到第iii列第i1i1i1列的三行分别有ppp、qqq、rrr个格子已被占用从之前的块延伸过来的部分其中p,q,r∈{0,1,2}p, q, r \in \{0, 1, 2\}p,q,r∈{0,1,2}表示第i1i1i1列有多少个格子已被占据这个状态表示当前填充的前沿位置以及下一列的“欠债”情况即有多少格子已经被之前的块占用。2. 状态转移对于每个状态(i,p,q,r)(i, p, q, r)(i,p,q,r)我们尝试放置222222种拼图块中的一种。每个拼图块被定义为一个3×33 \times 33×3的字符数组其中*表示该位置被块占用 空格表示该位置为空转移时需要检查块的左侧三列是否与当前偏移(p,q,r)(p, q, r)(p,q,r)匹配即对应位置必须是*块的左侧不能有额外的填充超出边界计算放置块后新的偏移量3. 偏移归一化放置一个块后可能会产生新的偏移。为了保持状态空间的大小可控我们进行偏移归一化计算新的p′,q′,r′p, q, rp′,q′,r′值后将它们减去最小值使至少一个值为000其他值在000到222之间。这样状态数量被限制在合理的范围内。4. 算法流程初始化dp[0][0][0][0]1dp[0][0][0][0] 1dp[0][0][0][0]1空棋盘一种方案对于每个iii从000到200020002000遍历所有(p,q,r)(p, q, r)(p,q,r)状态对于每个状态尝试放置222222种块中的每一种检查放置是否合法计算新状态并更新dpdpdp值对于输入的NNN答案就是dp[N][0][0][0]dp[N][0][0][0]dp[N][0][0][0]完全填满NNN列且无偏移5. 复杂度分析时间复杂度O(N×33×22)≈O(600N)O(N \times 3^3 \times 22) \approx O(600N)O(N×33×22)≈O(600N)对于N≤2000N \leq 2000N≤2000可以接受空间复杂度O(N×33)≈O(27N)O(N \times 3^3) \approx O(27N)O(N×33)≈O(27N)可以通过滚动数组优化但本题NNN较小直接开数组即可为什么这种方法有效状态压缩通过偏移量表示未完成的部分避免了记录整个棋盘状态完全性枚举所有块和所有可能的位置不会遗漏任何合法解高效性状态数有限转移代价小适合NNN较大的情况参考代码// ACM Puzzles// UVa ID: 12117// Verdict: Accepted// Submission Date: 2026-01-30// UVa Run Time: 0.000s//// 版权所有C2026邱秋。metaphysis # yeah dot net#includebits/stdc.husingnamespacestd;typedeflonglongll;constll MOD1000000000000LL;// 22种拼图块的定义charpuzzleBlocks[22][3][4]{{* ,* ,* },{* ,** ,* },{** , * ,** },{ * ,** ,** },{ * ,***, * },{** ,* ,** },{ * ,** , * },{ *, **,** },{** , **, *},{ * ,** ,* },{* ,** , * },{** ,** ,* },{** ,** , * },{** ,* ,* },{** , * , * },{ **,** ,* },{* ,** , **},{* ,* ,** },{ * , * ,** },{***, * , * },{ * , * ,***},{* ,** ,** }};ll dp[2005][3][3][3];// dp[i][p][q][r]voidinitialize(){// 初始化dp数组为0memset(dp,0,sizeof(dp));dp[0][0][0][0]1;// 起始状态for(inti0;i2000;i){for(intp0;p3;p)for(intq0;q3;q)for(intr0;r3;r){ll currentValdp[i][p][q][r];if(currentVal0)continue;// 尝试放置22种块中的每一种for(intblockIdx0;blockIdx22;blockIdx){// 检查块左侧三列是否与当前偏移匹配if(puzzleBlocks[blockIdx][0][p]!*||puzzleBlocks[blockIdx][1][q]!*||puzzleBlocks[blockIdx][2][r]!*)continue;// 检查左侧是否有额外填充不能超出边界if(p0puzzleBlocks[blockIdx][0][p-1]! )continue;if(q0puzzleBlocks[blockIdx][1][q-1]! )continue;if(r0puzzleBlocks[blockIdx][2][r-1]! )continue;// 计算放置后的新偏移intnewPip,newQiq,newRir;for(intk0;k3;k){if(puzzleBlocks[blockIdx][0][k]*)newP;if(puzzleBlocks[blockIdx][1][k]*)newQ;if(puzzleBlocks[blockIdx][2][k]*)newR;}// 标准化偏移减去最小值intminValmin({newP,newQ,newR});intoffsetPnewP-minVal;intoffsetQnewQ-minVal;intoffsetRnewR-minVal;// 更新dp值dp[minVal][offsetP][offsetQ][offsetR]currentVal;if(dp[minVal][offsetP][offsetQ][offsetR]MOD)dp[minVal][offsetP][offsetQ][offsetR]%MOD;}}}}intmain(){initialize();intn,caseNo1;while(cinnn!0)coutCase caseNo: dp[n][0][0][0]\n;return0;}总结本题是一个经典的状态压缩动态规划问题通过巧妙的状态设计将复杂的铺砖问题转化为可管理的动态规划。关键点在于偏移量状态表示用p,q,rp, q, rp,q,r表示下一列的占用情况偏移归一化通过减去最小值控制状态空间大小完全枚举尝试所有222222种块的放置方式这种解法具有通用性可以应用于类似的拼图或铺砖问题。理解这种状态表示和转移方法对于解决复杂的组合计数问题非常有帮助。

相关文章:

UVa 12117 ACM Puzzles

题目描述 ACM\texttt{ACM}ACM(儿童机器协会)计划为儿童设计一种新型拼图。所有拼图的尺寸都是 3N3 \times N3N ,并使用 222222 种特定的拼图块(某些块可以重复使用)。为了防止假冒产品,ACM\texttt{ACM}ACM …...

无电软触摸板:气动传感技术突破极端环境限制

坦佩雷大学的研究人员开发出了全球首款无需电力即可感知接触力、面积和位置的软性触摸板。该设备利用气动通道,使其能够在磁共振成像仪等不适合电子设备的环境中使用。软体机器人和康复辅助设备等软性装置也能受益于这项新技术。 这款触摸板完全由软硅胶制成&#x…...

LSTM时序预测与UI-TARS-desktop整合:智能工作流预测系统

LSTM时序预测与UI-TARS-desktop整合:智能工作流预测系统 1. 引言 你有没有遇到过这样的情况:每天在电脑前重复着相似的操作流程,比如打开特定软件、处理文件、发送邮件,这些重复性工作既耗时又容易出错?或者作为团队…...

GLM-OCR与卷积神经网络视觉原理科普

GLM-OCR与卷积神经网络视觉原理科普 你是不是也好奇,像GLM-OCR这样的工具,是怎么从一张充满干扰的图片里,准确无误地“认出”那些文字的?它背后依赖的卷积神经网络,听起来高深莫测,但它的工作原理其实可以…...

在Ubuntu 18.04上搞定GAMMA遥感软件:从依赖库到加密狗驱动的保姆级避坑记录

在Ubuntu 18.04上搞定GAMMA遥感软件:从依赖库到加密狗驱动的保姆级避坑记录 如果你正在Ubuntu 18.04上尝试安装GAMMA遥感软件,那么这篇文章就是为你准备的。作为一名遥感领域的科研人员,我深知GAMMA软件在InSAR处理中的重要性,也体…...

LIO-SAM部署WHU-TLS Tunnel数据集实战:从环境搭建到数据预处理

1. WHU-TLS Tunnel数据集详解 WHU-TLS Tunnel数据集是武汉大学发布的全球最大规模地面激光扫描点云基准数据集,专为三维重建和SLAM算法评估设计。这个数据集最吸引我的地方在于它包含了11种典型场景的17.4亿个三维点云数据,其中隧道场景数据对地下空间建…...

地平线2026年春季校园招聘正式启动!

点击阅读原文,即可投递简历!...

基于springboot美发门店管理系统设计与实现.7z(源码+论文)

[点击下载链接》》》] 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了美发门店管理系统的开发全过程。通过分析美发门店管理系统管理的不足,创建了一个计算机管理美发门店管理系统的方案。文章介绍了美…...

从Flask到WASI微服务:单文件Python应用72小时完成跨平台重构(附GitHub Star破千的开源模板)

第一章:从Flask单体到WASI微服务的范式跃迁 传统 Flask 应用以 Python 进程为边界,依赖全局解释器锁(GIL)和动态类型系统,在云原生环境中面临冷启动慢、资源隔离弱、跨语言集成难等固有瓶颈。WASI(WebAssem…...

rosserial_mbed_lib:ARM Cortex-M上的轻量ROS 1串行通信库

1. rosserial_mbed_lib 概述:面向 ARM Cortex-M 的 ROS 轻量级串行通信库 rosserial_mbed_lib 是专为 mbed OS 平台(特别是基于 ARM Cortex-M 系列微控制器,如 NXP LPC1768、ST STM32F4xx/F7xx/H7xx、Renesas RA6M5 等)定制的 …...

监督学习中的分类方法

监督学习是机器学习的重要分支,分类任务是其核心应用之一。分类方法旨在根据输入数据的特征预测其所属类别。常见分类方法包括决策树、支持向量机、朴素贝叶斯、逻辑回归等。决策树决策树的基本概念决策树是一种基于树状结构的监督学习算法,用于分类或回…...

FireRed-OCR Studio惊艳效果:低质量模糊文档仍保持92%结构还原精度

FireRed-OCR Studio惊艳效果:低质量模糊文档仍保持92%结构还原精度 1. 工业级文档解析新标杆 在日常办公和学习中,我们经常遇到这样的困扰:纸质文档需要数字化、扫描件模糊不清、表格结构难以保留。传统OCR工具往往只能识别文字&#xff0c…...

大麦抢票自动化系统进阶指南:双端策略与实战优化

大麦抢票自动化系统进阶指南:双端策略与实战优化 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 面对热门演出票务的激烈竞争&#xff0…...

SDRPlusPlus×铁路通信:信号解析实战指南的6个关键方法

SDRPlusPlus铁路通信:信号解析实战指南的6个关键方法 【免费下载链接】SDRPlusPlus Cross-Platform SDR Software 项目地址: https://gitcode.com/GitHub_Trending/sd/SDRPlusPlus 当你需要对铁路专用通信系统进行技术分析时,如何高效捕获和解码G…...

ArrayList、HashSet、HashMap 核心知识点+常用操作速记

文章目录ArrayList、HashSet、HashMap 核心知识点常用操作速记1. ArrayList 核心知识点1.1 核心特性1.2 常用操作速记1.2.1 创建1.2.2 增/改操作1.2.3 查询操作1.2.4 删除操作1.2.5 遍历操作(核心极简代码示例)1.2.6 基础属性操作1.3 补充知识点&#xf…...

TradingAgents-CN:基于辩论机制的多智能体金融决策系统技术实现

TradingAgents-CN:基于辩论机制的多智能体金融决策系统技术实现 【免费下载链接】TradingAgents-CN 基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版 项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN 在复杂的金融市场中&…...

一. Docker容器技术

一 Docker简介及部署方法 1.1 Docker简介 Docker之父Solomon Hykes:Docker就好比传统的货运集装箱 [!NOTE] 2008 年LXC(LinuX Contiainer)发布,但是没有行业标准,兼容性非常差 docker2013年首次发布,由Docker, Inc开发 1.1.1 什么…...

Office LTSC 2021离线安装ISO镜像制作全攻略(含ODT配置详解)

Office LTSC 2021离线安装ISO镜像制作全攻略(含ODT配置详解) 在企业IT管理中,批量部署办公软件是每个技术团队都会面临的常规任务。微软Office LTSC 2021作为长期服务通道版本,以其稳定性和长期支持特性成为许多组织的首选。然而不…...

5步打造专属BongoCat模型:从零基础到个性化定制实践教程

5步打造专属BongoCat模型:从零基础到个性化定制实践教程 【免费下载链接】BongoCat 让呆萌可爱的 Bongo Cat 陪伴你的键盘敲击与鼠标操作,每一次输入都充满趣味与活力! 项目地址: https://gitcode.com/gh_mirrors/bong/BongoCat 你是否…...

为什么你的Llama3本地推理延迟高达8s?——深入CUDA Graph、PagedAttention与vLLM动态批处理的3层性能压测对比报告

第一章:Python 大模型推理本地私有化部署方案在数据安全与合规性要求日益严格的背景下,将大语言模型(LLM)推理能力完全私有化部署于本地环境已成为金融、政务、医疗等关键行业的刚需。本章聚焦基于 Python 生态的轻量级、可复现、…...

Qt导航栏组件C02:配置中心树形菜单与面包屑联动

目录 一、引言 二、最终效果预览 三、核心实现原理 3.1 布局结构设计 3.2 核心技术点 四、代码实现详解 4.1 项目结构 4.2 导航组件的核心代码 五、总结 源码下载 系列编号:C-02 导航风格:浅色单栏侧边栏,三级树形配置菜单,顶部面包屑实时同步路径,树与面包屑双向联动跳转…...

多源数据不会处理?机器学习预测 + 因果识别,这套流程直接抄

随着数字经济时代的全面到来,经济学与管理学的研究范式正经历着一场深刻的“数据革命”。传统的计量经济学模型虽然在因果推断方面具有严谨的理论基础,但在面对海量、高维、非标准化、非结构化数据(如文本、图像)时,往…...

SEO_ 深入解读搜索引擎算法与SEO排名因素

SEO排名因素:搜索引擎算法的奥秘 在数字化时代,搜索引擎优化(SEO)是网站获得流量和曝光度的关键。搜索引擎算法是SEO的核心,它决定了网站在搜索结果中的排名。本文将深入解读搜索引擎算法与SEO排名因素,帮助…...

windows11安装Rust教程:从下载到环境配置

今天研究了一下构建跨平台桌面应用程序的框架Tauri,需要安装Rust环境,记录一下安装教程,防止遗忘。 第一步 前往 官网 下载适用于Windows的安装程序,根据你的电脑选择合适的版本下载。 下载成功后的rustup-init.exe&#xff1a…...

封神级Agent工具fetch-skill,一键搞定网页、推文、公众号,告别内容抓取内耗

在AI Agent飞速发展的今天,我们总在追逐更聪明的大模型,总在优化更复杂的提示词,却常常忽略了一个最基础也最致命的问题:如果Agent连干净的内容都拿不到,再强大的逻辑推理、再精准的信息提炼,也只能是“巧妇…...

Alibaba DASD-4B Thinking 对话工具开发:微信小程序前端接入全攻略

Alibaba DASD-4B Thinking 对话工具开发:微信小程序前端接入全攻略 最近在做一个智能对话项目,需要把大模型的对话能力快速集成到微信小程序里。选来选去,发现阿里云的DASD-4B模型是个不错的选择,推理速度快,对话效果…...

从反馈循环到动态平衡:用系统动力学模型解构商业与生态的复杂性

1. 系统动力学模型:商业与生态的"天气预报" 想象你是一位船长,既要把握商机又要避开风暴。系统动力学模型就是你的雷达系统——它不直接告诉你该往哪走,但能提前预警冰山和洋流变化。这种建模方法最早由MIT的福瑞斯特教授在1950年代…...

UniMMAD: Unified Multi-Modal and Multi-Class Anomaly Detection via MoE-Driven Feature Decompression

论文:https://arxiv.org/pdf/2509.25934 代码:https://github.com/yuanzhaoCVLAB/UniMMAD 摘要 为了解决问题(随便凑出来的问题) 提出了 基于专家混合模型(MoE)的目标检测。可以在3个领域、12种模态和66个类…...

2025年DeepSeek一体机选购指南:从医疗到政务的7大行业实战方案

2025年DeepSeek一体机行业选型全景指南:7大核心场景的智能决策框架 当医疗影像分析需要处理每秒20GB的DICOM数据流,当政务热线同时应对10万市民的方言咨询,当金融交易系统要在3毫秒内完成风险拦截——这些真实场景正在重新定义企业级AI基础设…...

【LE Audio】PACS核心缩写词速通——零基础也能看懂协议

学习任何技术协议的第一步,都是搞懂体系内的核心缩写词,蓝牙LE Audio中的PACS协议更是如此。PACS作为蓝牙音频设备能力发布与交互的核心服务,其规范中定义的缩写词并非孤立的字母组合,而是串联起协议层依赖、服务层核心、数据层传…...