AcWing1131 拯救大兵瑞恩(最短路)

2022-05-28 15:39:10 字數 1254 閱讀 4843

這題主要問題是有些地方有鑰匙,這種型別我們之前在bfs種做到過,就是用狀壓dp多列舉一維鑰匙就行了,因為鑰匙不需要時間,所以每次走到取完鑰匙肯定是最優的

本題是二維的,不過轉成一維更方便。我們的dis陣列原先記錄的是點,現在記錄的是點和狀態。建圖是,先建門,將門與牆都插入乙個set便於查詢

建完這兩個後,列舉所有位置建立其他沒有門牆的地方。

因為本題有兩種狀態轉移的可能,一種是走過一格,一種是在原地獲取鑰匙,因此邊權只有0和1,這種01邊權使用雙端佇列廣搜複雜度是線性的

在廣搜中,只需要列舉轉移即可

#include#include

#include

#include

#include

#define x first

#define y second

using

namespace

std;

typedef pair

pll;

const

int n = 11, m = 360, p = 1

<< 10

;int

n, m, k, p;

int h[n *n], e[m], w[m], ne[m], idx;

int g[n][n], key[n*n];

int dis[n *n][p];

bool st[n *n][p];

setnode;

void add(int a,int b,int

c)int

bfs());

while

(q.size()));}}

inti;

for(i=h[t.x];i!=-1;i=ne[i]));}}

}return -1;}

void

build(), dy[4] = ;

for(i=1;i<=n;i++)))

continue

; add(tmp1,tmp2,0);}}

}}int

main()

}for(i=1;i<=k;i++));

//the wall or the door

node.insert(pll);

if(e)

}build();

ints;

cin>>s;

for(i=1;i<=s;i++)

cout

return0;

}

view code

1131 求組合數

1131 求組合數 description 組合數cnr n,r n r n r 雖然組合數的計算簡單但也不乏有些陷阱,這主要是因為語言中的資料型別在表示範圍上是有限的。更何況還有中間結果溢位的現象,所以千萬要小心。input 求組合數的資料都是成對 m與n 出現的,你可以假設結果不會超過64位有符...

1131 合唱隊形

題目描述 n位同學站成一排,老師要請其中的 n k 位同學出列,使得剩下的k位同學不交換位置就能排成合唱隊形。合唱隊形是指這樣的一種隊形 設k位同學從左到右依次編號為1,2,k,他們的身高分別為t1,t2,tk,則他們的身高滿足t1 t2 ti ti ti 1 tk 1 i k 你的任務是,已知所有...

11 3 1 多播的概念

多播,也稱為 組播 將網路中同一業務型別主機進行了邏輯上的分組,進行資料收發的時候其資料僅僅在同一分組中進行,其他的主機沒有加入此分組不能收發對應的 資料。在廣域網上廣播的時候,其中的交換機和路由器只向需要獲取資料的主機複製並 資料。主機可以向路由器請求加入或退出某個組,網路中的路由器和交換機有選擇...