單詞矩陣 貳五語言

2022-04-28 20:42:15 字數 2027 閱讀 3431

problemcodevs

洛谷

題意:對於包含字母a到y各一次的單詞s,將其從上到下從左到右寫在乙個5*5的矩陣中,如單

詞adjptbekqucglrvfinswhmoxy寫出來如下:

a d j p t

b e k q u

c g l r v

f i n s w

h m o x y

若該矩陣滿足每一行每一列的字母都是字典序遞增的則稱s為優美的,如上述單詞就是

優美的,而adjptbegqucklrvfinswhmoxy則不是(第二列不滿足要求)。

your task

將所有優美的單詞按字典序列出,從小到大編號1,2,……

請你完成以下兩種任務:

1. 給定乙個優美的單詞,求其編號。

2. 給定乙個編號,求對應的優美的單詞。

輸入描述input description

第一行乙個字母,w表示任務1,n表示任務2

若是任務1,第二行是乙個優美的單詞,否則第二行是乙個正整數,表示某個優美的單

詞的編號,保證該數不超過優美的單詞的總數

輸出描述output description

一行,若是任務1,輸出對應編號,否則輸出對應的優美的單詞 

思路:試圖找規律 無果  所以就搜尋啦 (在做之前就知道是一道搜尋題qwq)

從小到達列舉字母來填方格時

對於每一行 左邊的必須比右邊先填(保證從左至右遞增)  

對於每一列 上面的必須比下面先填(保證從上至下遞增)

so dfs(a,b,c,d,e,now)   a表示第一行已經填了幾個 b,c,d,e 同推  now表示現在要填第幾個字母了(1表示a etc.)

帶上記憶化搜尋

那麼就是f[a][b][c][d][e]表示第一行填了a個,第二行填b個,第三行填c個,第四行填d個,第5行填e個的滿足題意的總方案數

現在我們具體來看兩個問題:

1.給定序列求編號

就是求字典序比它小的合法序列個數再加1(加上它自己)

列舉第1-25位上的數的字母 每一位都不能超過題目給定序列對應位置上的字母 (不能等於!)

舉個栗子:

我們要知道以be開頭的合法序列個數 那麼搜第一位為a的串行列數

然後搜第一二位為be的合法序列數 而不是搜第一位為b的合法序列數

然後把搜尋到的方案數都加起來 輸出答案記得加上1

2.給定編號求序列

同從小到大列舉第1-25位上的數字

假設 我們求第90個序列  現在列舉第二位(第一位必為a) 第二位為b時 有方案80種 ;為c時 有方案30種 

那麼要求的第90個序列的第二位一定為 c (方案總數剛好大於90)   

以此類推 一位一位地確定下去

1 #include2 #include3 #include4 #include

5using

namespace

std;

6int f[6][6][6][6][6],map[30

],ans;

7bool ck(int a,int b)

8int dfs(int a,int b,int c,int d,int e,int

now)920

intmain()

2130 printf("

%d",ans+1); //

要+131}32

else

42for(register int i=1;i<=25;i++) printf("

%c",map[i]-1+'a'

);43}44

return0;

45 }

view code

題解 USACO5 5 貳五語言Two Five

一道記憶化搜尋題 題目定義一類行列均單調遞增的 5 times5 矩陣,將其展開後所形成的字串按字典序編號.題目要求實現編號與字串的相互轉換 先不管字串與編號的相互轉換 給你一些限定條件 形如 x,y 處只能填某字元 讓你求滿足條件的合法矩陣數 1 暴搜 有兩種思路,一種是按順序搜每乙個格仔放哪乙個...

python 單詞矩陣

給定乙份單詞的清單,設計乙個演算法,建立由字母組成的面積最大的矩形,其中每一行組成乙個單詞 自左向右 每一列也組成乙個單詞 自上而下 不要求這些單詞在清單裡連續出現,但要求所有行等長,所有列等高。如果有多個面積最大的矩形,輸出任意乙個均可。乙個單詞可以重複使用。示例 1 輸入 this real h...

codevs1322 單詞矩陣

題目描述 description 對於包含字母a到y各一次的單詞s,將其從上到下從左到右寫在乙個5 5的矩陣中,如單 詞adjptbekqucglrvfinswhmoxy寫出來如下 a d j p t b e k q u c g l r v f i n s w h m o x y 若該矩陣滿足每一行...