首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

HDU 1523 Decoding Morse Sequences:動態規劃解碼摩斯密碼序列

     編輯:關於C++

題目大意

給定一段摩斯密碼編碼字符串(由 . 和 - 組成)和一個包含 n 個單詞的字典。每個單詞可轉換為對應的摩斯編碼。求有多少種不同的單詞序列(句子)拼接後的摩斯編碼恰好等於給定編碼。答案模 1,000,000,007。

核心思路:DP + Trie/哈希優化匹配

定義 dp[i] 表示前 i 個字符(編碼前綴)的合法解碼方案數。dp[0] = 1(空串 1 種方案)。

狀態轉移:對每個位置 i,嘗試匹配字典中每個單詞的編碼 code,若 s.substr(i, code.len) == code,則 dp[i + code.len] += dp[i]。

關鍵優化:預處理單詞編碼

 dict_codes;
for (each word) {
    std::string code;
    for (char c : word) code += morse[c - 'A'];
    dict_codes.push_back(code);
}

DP 遞推實現

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved