日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

UVALive 3942 Remember the Word(字典树+DP)

發布時間:2024/6/21 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UVALive 3942 Remember the Word(字典树+DP) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1943

題意:一個長字符串和多個短字符串,求短字符串有多少種方式組成長字符串。

狀態轉移方程: dp[i] = sum(d[i + len(x)]) ?(x是s[i...L]的前綴)?

對于每個i,如果直接暴力尋找s[i...L]的前綴,復雜度為O(nm) (n為短字符串的個數,m為短字符串的長度),肯定會超時。

既然是求前綴,那么可以使用前綴樹(字典樹)來解決此問題。用字典樹尋找前綴的復雜度為O(m)。

#include <cstdio> #include <iostream> #include <cstring> #define maxn 400100 #define maxm 300010 #define mod 20071027 #define sigma_size 26 using namespace std;char str[maxm], tstr[110]; int dp[maxm], ch[maxn][sigma_size], val[maxn], sz;struct Trie {int get_id(char c){return c - 'a';}void insert(char* str, int v){int u = 0, len = (int)strlen(str);for (int i = 0; i < len; ++i){int id = get_id(str[i]);if (!ch[u][id]){memset( ch[sz], 0, sizeof(ch[sz]));val[sz] = 0;ch[u][id] = sz++;}u = ch[u][id];}val[u] = v;}int query(char* str, int start){int u = 0, result = 0, len = (int)strlen(str), next;for (int i = 0; i < len; ++i){int id = get_id(str[i]);next = ch[u][id];if (next){if (val[next])result = (result + dp[i + start + 1])%mod;}elsebreak;u = next;}return result;} };void init();int main(void) {int ca = 1, n;while (scanf("%s", str) != EOF){init();int len = (int)strlen(str);scanf("%d", &n);Trie trie = Trie();while (n--){scanf("%s", tstr);trie.insert( tstr, 1);}dp[len] = 1;for (int i = len - 1; i >= 0; i--){dp[i] = trie.query( str + i, i);}printf("Case %d: %d\n", ca++, dp[0]);}return 0; }void init() {sz = 1;memset( dp, 0, sizeof(dp));memset( ch[0], 0, sizeof(ch[0]));memset( val, 0, sizeof(val)); }

?

轉載于:https://www.cnblogs.com/chuninsane/p/4923533.html

總結

以上是生活随笔為你收集整理的UVALive 3942 Remember the Word(字典树+DP)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。