P2133 天作之合

2021-08-25 19:33:56 字數 1402 閱讀 9146

題目位址

1、考慮字串變換規律,是交換相鄰的兩個數字

2、因為數字搜尋沒有明顯的邊界,所以可以考慮廣度優先搜尋,或者迭代加深搜尋

以下是逐步分析

#include 

#include

#include

#include

#include

using

namespace

std;

const

int maxn = 666667;

const

int inf = 20021020;

bool vis [maxn],fl=false;

int ans=0,f[maxn];

int dv[7]= ;

int qread()

while (ch>='0'&&ch<='9')

return f*x;

}int st,ed;

dv陣列方便於把乙個六位整數拆分開,它的具體操作可以參見下面的**。

maxn,inf分別代表最大組合情況和絕大值。

陣列vis用作判重,f陣列可以執行剪枝。

全域性變數 ans用作列舉答案。

仍有部分陣列空間浪費了,例如vis[659000]等

int qread()是快速讀入函式,習慣性的加上

st代表起始位置,ed代表結束位置

以上是並不完美的開頭

int take_out(int

x,int w)

int cha(int

x,int w)

x/dv[w]可以砍掉x第w位以後的數,然後對10取餘可以得到特定位。

函式int cha(int x,int w)交換兩位數字。它基於take_out函式。

void dfs(int x,int

sum)

for (int i=1; i<=5; i++)

}

深度優先搜尋部分;

如果當前解大於已經找到的最優解,就切斷這一分支路線。

如果當前x的解大於上次找到的x的解,也切斷這一分支路線。

注意坑點,ans<=2要加2

以下是主函式:

int main() 

for (int i=1; iwhile (true)

return

0;}

注意st==ed的特判,要輸出2的;

初始化vis和f陣列,列舉ans值

洛谷 P1759 通天之潛水

直達通天路 小a歷險記第三篇 在猴王的幫助下,小a終於走出了這篇荒山,卻發現一條波濤洶湧的河攔在了自己的面前。河面上並沒有船,但好在小a有n個潛水工具。由於他還要背重重的揹包,所以他只能背m重的工具,又因為他的力氣並不是無限的,河卻很寬,所以他只能背有v阻力的工具。但是這條河下有非常重要的資料,所以...

P1760 通天之漢諾塔

直達通天路 小a歷險記第四篇 在你的幫助下,小a成功收集到了寶貴的資料,他終於來到了傳說中連線通天路的通天山。但是這距離通天路仍然有一段距離,但是小a突然發現他沒有地圖!但是幸運的是,他在山腳下發現了乙個寶箱。根據經驗判斷 小a有經驗嗎?地圖應該就在其中!在寶箱上,有三根柱子以及在一根柱子上的n個圓...

洛谷 P1759 通天之潛水

題目提供者lych 標籤動態規劃洛谷原創 難度普及 提高 提交該題 討論 題解記錄 直達通天路 小a歷險記第三篇在猴王的幫助下,小a終於走出了這篇荒山,卻發現一條波濤洶湧的河攔在了自己的面前。河面上並沒有船,但好在小a有n個潛水工具。由於他還要背重重的揹包,所以他只能背m重的工具,又因為他的力氣並不...