BZOJ 3990 深搜思路題目

2021-07-05 09:11:03 字數 1825 閱讀 5158

題目:

小a有乙個1-2^n的排列a[1..2^n],他希望將a陣列從小到大排序,小a可以執行的操作有n種,每種操作最多可以執行一次,對於所有的i(1<=i<=n),第i中操作為將序列從左到右劃分為2^段,每段恰好包括2^個數,然後整體交換其中兩段.小a想知道可以將陣列a從小到大排序的不同的操作序列有多少個,小a認為兩個操作序列不同,當且僅當操作個數不同,或者至少乙個操作不同(種類不同或者操作位置不同).

下面是乙個操作事例:

n=3,a[1..8]=[3,6,1,2,7,8,5,4].

第一次操作,執行第3種操作,交換a[1..4]和a[5..8],交換後的a[1..8]為[7,8,5,4,3,6,1,2].

第二次操作,執行第1種操作,交換a[3]和a[5],交換後的a[1..8]為[7,8,3,4,5,6,1,2].

第三次操作,執行第2中操作,交換a[1..2]和a[7..8],交換後的a[1..8]為[1,2,3,4,5,6,7,8].

分析:首先由這樣的乙個性質,乙個合法序列的操作的任意排列都合法,因為對於任意兩個動作先執行哪乙個產生的結果都一樣(大範圍的交換,對小範圍內的點得相對位置沒有影響)

再多說一句,這個內部是很重要的,與長為8的陣列, 劃分成4 ,4 ,其他層面的改變都是對4,4 內部的改變與4 ,4 的先對位置無關,所以具有無序性。

那麼只需確定從大到小或從小到大列舉操作即可。

對於每次的處理,可以看成這樣例如 8

7 8 5 6 1 2 4 3  那麼對於第一種交換需要解決的問題是吧所有的段變成12 34 56 78 這樣四個段,他們的順序無所謂,因為只有該操作可以做到這一點。這樣先統計有多少小段

內的兩個數不是 遞增且相差1的關係。那麼多與2個顯然沒有解,進行可行性列舉,就直接過了此題。

//#pragma comment(linker, "/stack:1024000000,1024000000")

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define all(a) a.begin(), a.end()

#define clr(a, x) memset(a, x, sizeof a)

#define x first

#define y second

#define pb push_back

#define lowbit(x) (x&(-x))

#define lson l,m,rt<<1

#define rson m+1,r,rt<<1|1

#define rep1(i,x,y) for(int i=x;i<=y;i++)

#define rep(i,n) for(int i=0;i<(int)n;i++)

using namespace std;

const double eps = 1e-10;

typedef long long ll;

typedef long long ll;

typedef pairpii;

const int oo =0x3f3f3f3f;

const int n = (1<<12)+10;

int id[n] , n , aa[n] , now[n] , ans , ji[30];

void dfs(int d,vectora , int all)

int cnt = 0, po[3];

for(int i=1 , j=1;ite;

if(!cnt)

深搜 模板題 迷宮問題

迷宮 問題描述 給定乙個n m方格的迷宮,迷宮裡有t處障礙,障礙處不可通過。給定起點座標和 終點座標,問 每個方格最多經過1次,有多少種從起點座標到終點座標的方案。在迷宮 中移動有上下左右四種方式,每次只能移動乙個方格。資料保證起點上沒有障礙。輸入樣例 輸出樣例 資料規模 1 n,m 5 輸入 第一...

BZOJ 3252 攻略 思路題

傳送門 比較好想的一道思路題,結果有個地方沒開 long long wa 了三次。其實就是模仿一下樹鏈剖分,重新定義重兒子,乙個點的重兒子為所有兒子中到葉節點權值最大的點,然後就和樹鏈剖分一樣 dfs 一遍,把那些鏈的頂端的 sum 值放到乙個陣列排個序。include include includ...

基礎演算法題 地宮取寶(深搜 剪枝)

地宮取寶 問題描述 x 國王有乙個地宮寶庫。是 n x m 個格仔的矩陣。每個格仔放一件寶貝。每個寶貝貼著價值標籤。地宮的入口在左上角,出口在右下角。小明被帶到地宮的入口,國王要求他只能向右或向下行走。走過某個格仔時,如果那個格仔中的寶貝價值比小明手中任意寶貝價值都大,小明就可以拿起它 當然,也可以...