【A*/BFS】P5507 機關

  • # P5507 機關

題目描述

這扇門上有一個機關,上面一共有12個旋鈕,每個旋鈕有4個狀態,將旋鈕的狀態用數字111444表示

每個旋鈕只能向一個方向旋轉(狀態:1->2->3->4->1),在旋轉時,會引起另一個旋鈕也旋轉一次(方向相同,不會引起連鎖反應),同一旋鈕在不同狀態下,可能會引起不同的旋鈕旋轉(在輸入中給出)

當所有旋鈕都旋轉到狀態1時,機關就打開了

由于旋鈕年久失修,旋轉一次很困難,而且時間很緊迫,因此Steve希望用最少的旋轉次數打開機關

這個任務就交給你了

輸入格式

121212行,每行555個整數,描述機關的狀態

iii行第一個整數sis_isi?表示第iii個旋鈕的初始狀態是sis_isi?

接下來444個整數ai,j,j=1,2,3,4a_{i,j},j=1,2,3,4ai,j?,j=1,2,3,4表示這個旋鈕在狀態jjj時旋轉,會引起第ai,ja_{i,j}ai,j?個旋鈕旋轉到下一個狀態

輸出格式

第一行一個整數nnn,表示最少的步數

第二行nnn個整數,表示依次旋轉的旋鈕編號

數據保證有解

數據保證存在打開機關的方式

每個測試點10分

只要你輸出格式正確,輸出了正確的步數,并給出了任意一種正確方案,就能得到該測試點的得分

否則,該測試點不得分

數據范圍:

測試點所需步數
14
26
38
49
510
611
712
813
915
1017

思路

首先類似狀壓DP要設計狀態我們讓當前旋鈕在狀態1記作00,狀態2記作01,以此類推,總的狀態就是 ∑i=112h(i)×2i?1\sum^{12}_{i=1}{h(i)\times2^{i-1}}i=112?h(i)×2i?1h(i)h(i)h(i) 表示第 iii 個旋鈕的狀態。然后用 A* 算法找到預估最好的路線BFS即可。

代碼

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1 << 24;//總方案數 
int a[20][10],now[20],fir,g[N + 10],zy[N + 10],choice[N + 10];
struct node{int zt;double f;//估值函數 node(int s):zt(s){double h = 0;f = 0;for(int i = 0;i < 12;i++) {if((s >> (i * 2)) & 3) h += 4 - ((s >> (i * 2)) & 3);}f = g[s] + h / 2;}friend bool operator <(node x,node y) {return x.f > y.f;}
};
priority_queue<node>q;
signed main() {for(int i = 0;i < 12;i++) {scanf("%lld",&now[i]);fir |= (now[i] - 1) << (2 * i);for(int j = 0;j < 4;j++) scanf("%lld",&a[i][j]),a[i][j]--;}g[fir] = 0;q.push(node(fir));while(!q.empty()) {int zt = q.top().zt;q.pop();if(!zt) break;for(int i = 0;i < 12;i++) {int zti = (zt >> (i * 2)) & 3;int ql = (zt >> (a[i][zti] * 2)) & 3;int new_node = zt;new_node ^= zti << (i * 2);new_node ^= ((zti + 1) & 3) << (i * 2);new_node ^= ql << (a[i][zti] * 2);new_node ^= ((ql + 1) & 3) << (a[i][zti] * 2);if(!g[new_node]) {g[new_node] = g[zt] + 1;zy[new_node] = zt;choice[new_node] = i;q.push(node(new_node));}}}printf("%lld\n",g[0]);int ans[20],cnt = g[0];for(int i = 0;i != fir;i = zy[i]) {ans[cnt] = choice[i] + 1;cnt--;}for(int i = 1;i <= g[0];i++) printf("%lld ",ans[i]);return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/93796.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/93796.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/93796.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

終結集成亂局:模型上下文協議(MCP)如何重構AI工具生態?

AI 助手正處于能力發展的初級階段。它們擅長處理獨立任務——例如解析 PDF、編寫 SQL 語句、等等——但當你要求它們在 Slack、Gmail 和 Jira 等平臺間協同操作時&#xff0c;整個流程就變得異常復雜且脆弱&#xff0c;如同調試一套由眾多 API 密鑰串聯的精密機械&#xff08;魯…

談談畢業工作一年后的變化

文章目錄談談畢業工作一年后的變化工作篇生活篇談談畢業工作一年后的變化 工作篇 2025.7.30 21:49 呼~再次打開這個網站發布文章&#xff0c;是多么陌生。仿佛有說不完的話&#xff0c;但如今時間卻不允許我無限制的長篇大論的寫下去了。 先說下工作吧。 畢業后工作好快啊&…

huggingface下載問題

國內使用git clone下載huggingfaceTOC 國內直接git clone連接不上問題 git clone https://huggingface.co/spaces/ZebangCheng/Emotion-LLaMA Cloning into ‘Emotion-LLaMA’… fatal: unable to access ‘https://huggingface.co/spaces/ZebangCheng/Emotion-LLaMA/’: Fai…

anaconda searchanaconda show | conda 檢索包資源安裝指定版本包指定源安裝命令package

conda issuehttp://t.csdnimg.cn/ndZZK 目錄 常規安裝 檢索包資源 獲取指定包的安裝源&安裝指令 安裝指定包 常規安裝 conda 常規安裝xxx包 conda install xxx conda install有可能會受限于channel導致報錯PackagesNotFoundError: The following packages are not av…

python cli命令 cli工具命令 自定義cli命名 開發 兼容 window、mac、linux,調用示例

前言需求背景整個項目基于Python開發&#xff0c;需求方期望不直接調用Python腳本執行&#xff0c;希望封裝為cli命令執行Python腳本&#xff0c;使其更為簡單而又“優雅”。類似直接使用 adb devices 的方式直接調用運行&#xff0c;而不是 python adbToolls.py devices的方式…

k8s pod生命周期、初始化容器、鉤子函數、容器探測、重啟策略

pod結構Pause容器 Pause容器是每個Pod都會有的一個根容器&#xff0c;它的作用有兩個 可以以它為根據&#xff0c;評估整個pod的健康狀態可以在根容器上設置IP地址&#xff0c;其他容器都以此IP&#xff08;Pod IP&#xff09;&#xff0c;以實現Pod內部的網絡通信&#xff0c;…

Redis:緩存雪崩、穿透、擊穿的技術解析和實戰方案

&#x1f6a8; 1、簡述 隨著系統規模擴大&#xff0c;Redis 緩存被廣泛用于數據預熱、熱點數據防護和高并發系統優化。然而在高并發環境中&#xff0c;緩存雪崩、穿透、擊穿等問題若處理不當&#xff0c;可能導致系統雪崩式崩潰。 本文從原理、原因出發&#xff0c;結合實際項目…

前端-html+CSS基礎到高級(二)html基礎

一、 為什么需要Web標準 瀏覽器差異問題&#xff1a;五大主流瀏覽器&#xff08;IE、Chrome、Firefox、Safari等&#xff09;使用不同渲染引擎&#xff0c;導致相同代碼解析效果存在差異。為什么需要Web標準&#xff1f;不同瀏覽器的渲染引擎不同&#xff0c;對于相同代碼解析的…

前端-移動Web-day2

目錄 1、空間-平移 2、視距 3、空間旋轉-Z軸 4、空間旋轉-X軸 5、空間旋轉-Y軸 6、立體呈現 7、案例-3D導航 8、空間-縮放 9、動畫-體驗 10、動畫-實現步驟 11、animation復合屬性 12、animation拆分寫法 13、案例-走馬燈 14、精靈動畫 15、多組動畫 16、案例-…

力扣1116題:用C++實現多線程交替輸出零、偶數、奇數

一、題目解讀 力扣1116題要求設計一個類&#xff0c;實現三個線程交替輸出數字&#xff1a;一個線程輸出連續的0&#xff0c;一個線程輸出連續的偶數&#xff0c;另一個線程輸出連續的奇數。輸入參數n為總輸出次數&#xff08;每個線程各輸出n次&#xff09;&#xff0c;輸出需…

C語言(07)——原碼 補碼 反碼 (超絕詳細解釋)

本文的內容通下面這篇文章有著緊密的聯系&#xff0c;讀者可以選擇性閱讀 C語言————二、八、十、十六進制的相互轉換-CSDN博客 相關的C語言練習題和思維鍛煉可以參考以下文章 C語言————練習題冊&#xff08;答案版&#xff09;-CSDN博客 C語言————斐波那契數列…

磁盤壞道檢測工具在美國服務器硬件維護中的使用規范

磁盤壞道檢測工具在美國服務器硬件維護中的使用規范在服務器硬件維護領域&#xff0c;磁盤壞道檢測工具是保障數據安全的第一道防線。本文將系統介紹美國數據中心環境下專業級磁盤診斷方案的實施標準&#xff0c;重點解析SMART檢測、壞道修復算法與自動化運維流程的整合方法&am…

【n8n】如何跟著AI學習n8n【03】:HTTPRequest節點、Webhook節點、SMTP節點、mysql節點

前言 n8n的系統性學習&#xff0c;對各知識點地毯式學習&#x1f50d;~ 前面課程 定制n8n的AI老師&#xff0c;有AI老師制定學習大綱&#xff0c;參考之前的文檔&#xff08;本系列n8n學習大綱&#xff0c;也在這里&#xff09;&#xff1a; 【n8n】如何跟著AI學習n8n_01&a…

Vue 的雙向數據綁定原理

Vue 的雙向數據綁定是通過 數據劫持 發布-訂閱模式 實現的&#xff0c;具體分為以下三個關鍵機制&#xff1a;1. 數據劫持&#xff08;響應式系統&#xff09; Vue 使用 Object.defineProperty&#xff08;Vue 2&#xff09;或 Proxy&#xff08;Vue 3&#xff09;監聽數據變化…

【基于C# + HALCON的工業視覺系統開發實戰】三十五、金屬表面劃傷檢測:強反光場景解決方案

摘要:針對金屬表面強反光導致劃傷檢測準確率低的行業痛點,本文提出基于光度立體法的工業視覺檢測方案。系統采用“硬件抗反光+算法重建”雙策略,硬件上通過可編程分區環形光源、偏振鏡頭與高動態相機構建成像系統;算法上利用四方向光源序列圖像重建表面法向量與高度場,實現…

為什么bert是雙向transformer

BERT 是雙向 Transformer&#xff0c;這是它的一個核心創新點。下面我從 技術原理、與傳統 Transformer 的區別、以及雙向性的實際意義 來詳細解釋為什么 BERT 被稱為“雙向 Transformer”。一、什么是 BERT 的“雙向”&#xff1f;在 BERT 的論文中&#xff0c;雙向的原文是 &…

vue中使用Canvas繪制波形圖和頻譜圖(支持.pcm)

實現方式一&#xff1a; vue中使用wavesurfer.js繪制波形圖和頻譜圖 安裝colorMap&#xff1a; npm install --save colormap1、單個頻譜圖 效果&#xff1a; 源碼&#xff1a; <template><div class"spectrogram-container"><canvas ref"ca…

【Python系列】Flask 應用中的主動垃圾回收

博客目錄一、Python 內存管理基礎二、Flask 中手動觸發 GC 的基本方法三、高級 GC 策略實現1. 使用裝飾器進行請求級別的 GC2. 定期 GC 的實現四、Flask 特有的 GC 集成方式1. 使用 teardown_request 鉤子2. 結合應用上下文管理五、智能 GC 策略六、注意事項與最佳實踐七、替代…

Linux和shell

最快入門的方式是使用蘋果系統。此外&#xff0c;累計補充學習&#xff1a;一、目錄結構/bin&#xff0c;二進制文件 /boot&#xff0c;啟動文件 /dev&#xff0c;設備文件 /home&#xff0c;主目錄&#xff0c;一般外接包、安裝包放在這里 /lib&#xff0c;庫文件 /opt&#x…

告別內存泄漏:你的Rust語言30天征服計劃

歡迎踏上Rust學習之旅&#xff01;第一周&#xff1a;奠定基礎 (Week 1: Laying the Foundation)第1天&#xff1a;環境搭建與 “Hello, World!”核心概念: 安裝Rust工具鏈 (rustup)&#xff0c;它包含了編譯器rustc和包管理器Cargo。Cargo是你的好朋友&#xff0c;用于創建項目…