English Game【字典树+dp】 素颜马尾好姑娘i 2022-05-26 06:50 30阅读 0赞 ## English Game ## #### 题目描述 #### This English game is a simple English words connection game. The rules are as follows: there are N English words in a dictionary, and every word has its own weight v. There is a weight if the corresponding word is used. Now there is a target string X. You have to pick some words in the dictionary, and then connect them to form X. At the same time, the sum weight of the words you picked must be the biggest. #### 输入 #### There are several test cases. For each test, N (1<=n<=1000) and X (the length of x is not bigger than 10000) are given at first. Then N rows follow. Each row contains a word wi (the length is not bigger than 30) and the weight of it. Every word is composed of lowercases. No two words in the dictionary are the same. #### 输出 #### For each test case, output the biggest sum weight, if you could not form the string X, output -1. #### 样例输入 #### 1 aaaa a 2 3 aaa a 2 aa 5 aaa 6 4 abc a 1 bc 2 ab 4 c 1 3 abcd ab 10 bc 20 cd 30 3 abcd cd 100 abc 1000 bcd 10000 #### 样例输出 #### 8 7 5 40 \-1 #### 题意概括: #### 给出n个词,每个词有一个权值,组成一个词典,求给出的那个字符串最大的权值和。 #### 解题思路: #### 先给词典建一个字典树(trie),然后对给出的字符串用动态规划求出最大权值和。 #### AC代码: #### #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; #define N 100010 int f[N][30]; int main() { int i, j, k, n, m, cnt; int dp[N], g[N]; char s[N], str[N]; while(~scanf("%d%s", &n, s+1)){ memset(f[0], 0, sizeof(f[0])); cnt = 0; while(n--){ scanf("%s%d", str, &m); k = 0; for(i = 0; str[i]; i++){ if(!f[k][str[i]-'a']){ f[k][str[i]-'a'] = ++cnt; memset(f[cnt], 0, sizeof(f[cnt])); g[cnt] = 0; } k = f[k][str[i]-'a']; } g[k] = max(g[k], m); } memset(dp, 0, sizeof(dp)); dp[0] = 1; for(i = 1; s[i]; i++){ if(!dp[i-1]) continue; k = 0; for(j = i; s[j]; j++){ if(f[k][s[j]-'a']){ k = f[k][s[j]-'a']; if(g[k]) dp[j] = max(dp[j], dp[i-1]+g[k]); } else break; } } printf("%d\n", dp[strlen(s+1)]-1); } return 0; }
相关 Strategic Game(树形DP) 目录 Strategic Game(树形DP) 题目 题意 思路 题解 Strategic Gam 超、凢脫俗/ 2023年06月01日 06:11/ 0 赞/ 9 阅读
相关 字典树 字典树 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^\_^ 题目描述 遇到单词不认识怎么办? 查字 ゞ 浴缸里的玫瑰/ 2022年08月18日 02:28/ 0 赞/ 182 阅读
相关 字典树 Trie,又称字典树,前缀树(prefix tree),是一种树形结构,用于保存大量的字符串。 它的优点是:利用字符串的公共前缀来节约存储空间。查找、插入复杂度为O(n),n 电玩女神/ 2022年08月01日 00:08/ 0 赞/ 169 阅读
相关 字典树 Problem Description 遇到单词不认识怎么办? 查字典啊,已知字典中有n个单词,假设单词都是由小写字母组成。现有m个不认识的单词,询问这m个单词是否出现在 不念不忘少年蓝@/ 2022年07月12日 05:51/ 0 赞/ 215 阅读
相关 字典树 一、引入 [点击打开链接][Link 1] 字典是干啥的?查找字的。 字典树自然也是起查找作用的。查找的是啥?单词。 看以下几个题: 1、给出n个单词和m个询问 今天药忘吃喽~/ 2022年06月16日 08:21/ 0 赞/ 231 阅读
相关 字典树 题目链接:[点击打开链接][Link 1] 代码: include<iostream> include<cstring> using namespa 不念不忘少年蓝@/ 2022年05月30日 05:46/ 0 赞/ 191 阅读
相关 English Game【字典树+dp】 English Game 题目描述 This English game is a simple English words connection game. T 素颜马尾好姑娘i/ 2022年05月26日 06:50/ 0 赞/ 31 阅读
相关 字典树 1 定义 键树又称数字查找树,它是一棵度大于2的树,树中的每个节点值含有组成关键字的符号。例如,若关键字是数值,则节点中只包含一个数位。若关键字是单词,则节点中只包含一个 r囧r小猫/ 2022年04月10日 01:47/ 0 赞/ 261 阅读
相关 字典树 字典树是一种以树这种结构为基础建立的算法 ,那么字典树到底有哪些典型的应用呢? 1.字典树在串的快速检索中的应用。 给出N个单词组成的熟词表,以及一篇全用小写英文 绝地灬酷狼/ 2022年03月19日 04:20/ 0 赞/ 258 阅读
相关 【Leetcode】174. Dungeon Game(反向DP) The demons had captured the princess (P) and imprisoned her in the bottom-right corner o 秒速五厘米/ 2022年02月02日 11:39/ 0 赞/ 188 阅读
还没有评论,来说两句吧...