題目描述 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
若該矩陣滿足每一行每一列的字母都是字典序遞增的則稱s為優美的,如上述單詞就是
優美的,而adjptbegqucklrvfinswhmoxy則不是(第二列不滿足要求)。
your task
將所有優美的單詞按字典序列出,從小到大編號1,2,……
請你完成以下兩種任務:
1. 給定乙個優美的單詞,求其編號。
2. 給定乙個編號,求對應的優美的單詞。
輸入描述
input description
第一行乙個字母,w表示任務1,n表示任務2
若是任務1,第二行是乙個優美的單詞,否則第二行是乙個正整數,表示某個優美的單
詞的編號,保證該數不超過優美的單詞的總數
輸出描述
output description
一行,若是任務1,輸出對應編號,否則輸出對應的優美的單詞
樣例輸入
sample input
w abcdefghijklmnopqrsutvwxy
樣例輸出
sample output
2
資料範圍及提示
data size & hint
樣例輸入二
n 20
樣例輸出二
abcdefghijklmnopqsuwrtvxy
正解:記憶化搜尋
解題報告:
今天考試t5,感覺好神啊,%%%。
考慮直接搜尋的話肯定會tle,但我們可以想到乙個點一定比他右下方的所有點權值小,這可以作為乙個剪枝。
那麼考慮記憶化搜尋,f[i][j][k][l1][l2]表示第一行擺了i個,第二行擺了j個,第三行擺了k個,第四行擺了l1個,第五行擺了l2個的方案數(保證五個數不降,才能保證合法性)
w操作也是類似的,只是每一位約束上界不能超過給定的字串,最後統計方案,輸出方案+1即可(要包括自己)。
1//it is made by jump~
2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include
13using
namespace
std;
14 typedef long
long
ll;15
intn;
16char cc,ch[26
];17
int ans[26
];18
int f[6][6][6][6][6
];19
//f[i][j][k][l1][l2]表示第一行擺了i個,第二行擺了j個,第三行擺了k個,第四行擺了l1個,第五行擺了l2個的方案數,保證五個數不降,才能保證合法性
2021 inline int
getint()
2227
28 inline bool check(int x,int num)
2930 inline int dfs(int a,int b,int c,int d,int e,int
tot)
4142 inline void
work()51}
52 printf("
%d",n+1);//
加上自己53}
54else63}
64for(int i=0;i<25;i++) printf("
%c",ans[i]+'
a'-1
);65}66
}6768int
main()
69
Codevs1322 單詞矩陣
對於包含字母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為...
Codevs 單詞接龍 DFS,substr
單詞接龍 深搜和substr 函式的使用。由於相連線的單詞只會是乙個連乙個,不可能出現乙個單詞隔著連兩個 這樣中間那個就沒用了 所以不需要儲存連線好的 龍 只需知道任意兩個單詞之間能否相連,最少幾個字母相連,隻後就可以用dfs來搜尋最長 龍 雖然理論上是會超時的,但資料較水,從題目中n 20也就應該...
CodeVS3013 單詞背誦
靈夢有n個單詞想要背,但她想通過一篇文章中的一段來記住這些單詞。文章由m個單詞構成,她想在文章中找出連續的一段,其中包含最多的她想要背的單詞 重複的只算乙個 並且在背誦的單詞量盡量多的情況下,還要使選出的文章段落盡量短,這樣她就可以用盡量短的時間學習盡可能多的單詞了。第1行乙個數n,接下來n行每行是...