题面 sol 设\(f_{i,j}\)表示填了前\(i\)个字母,在\(AC\)自动机上跑到了节点\(j\)的最大得分.因为匹配需要暴跳\(fail\)所以预先把\(fail\)指针上面的匹配数传下来,这样就只要计算当前节点的贡献就可以了. code #include<cstdio> #include<algorithm> #include<cstring> #include<queue> using namespace std; const int N =…
Description 贝西正在打格斗游戏.游戏里只有三个按键,分别是“A”.“B”和“C”.游戏中有 N 种连击 模式,第 i 种连击模式以字符串 Si 表示,只要贝西的按键中出现了这个字符串,就算触发了一次连 击模式.不 同的连击模式是独立计算的,如果几个连击模式同时出现在贝西的按键顺序里,就算有重 叠部分, 也可以同时算作触发了多个模式. 假如有三个连击模式,分别是“AB”,“BA”,“ABC”,而贝西按下了“ABABC”,那么她一共 触发了四次 连击.假设贝西一共可以按 K 次键,那么她…
思路 简单的AC自动机上dp,暴力跳fail向子节点直接转移即可 代码 #include <cstdio> #include <algorithm> #include <cstring> #include <queue> using namespace std; int trie[400][3],Nodecnt,mark[400],fail[400],dp[1001][400],root,k,n; char t[400]; void insert(char…
好久没有写博客了,好惭愧啊……虽然这是一道弱题但还是写一下吧. 这道题目的思路应该说是很容易形成:字符串+最大值?自然联想到学过的AC自动机与DP.对于给定的字符串建立出AC自动机,dp状态dp[i][j]则表示第i位(我们求的字符串的第i位),匹配到自动机的第j位所能获得的最大值.只需要沿儿子节点与fail指针转移即可. #include <bits/stdc++.h> using namespace std; #define maxn 1005 int n, m, ans, cnt; ],…
题目链接 手写一下AC自动机(我可没说我之前不是手写的) Trie上dp,每个点的贡献加上所有是他后缀的串的贡献,也就是这个点到根的fail链的和. #include <cstdio> #include <queue> #include <cstring> #include <algorithm> using namespace std; const int MAXK = 1010; const int MAXN = 1010; struct ACA{ in…
题目描述 Bessie is playing a video game! In the game, the three letters 'A', 'B', and 'C' are the only valid buttons. Bessie may press the buttons in any order she likes; however, there are only N distinct combos possible (1 <= N <= 20). Combo i is repr…
正解:AC自动机+dp 解题报告: 传送门! 算是个比较套路的AC自动机+dp趴,,, 显然就普普通通地设状态,普普通通地转移,大概就f[i][j]:长度为i匹配到j 唯一注意的是,要加上所有子串的贡献,就在结构体中新加一个变量d表示在跟到这个节点的串以及后缀中完整串的个数 直接在bfs求fail的时候加上fail指针的d就欧克 啊当然只是为了方便描述所以说另开一个d,,,实际实现的话直接把标记结尾的那个值改成int类型搞下就欧克 然后说下细节,,, 其实就一个细节,就赋初值问题,要把除了f[i…
题目描述 Bessie is playing a video game! In the game, the three letters 'A', 'B', and 'C' are the only valid buttons. Bessie may press the buttons in any order she likes; however, there are only N distinct combos possible (1 <= N <= 20). Combo i is repr…
题面链接 题解 首先构建出AC自动机 然后在AC自动机上面跑DP 转移很显然从Trie树的节点跳到他的儿子节点 但是要注意一个问题, 在计算的时候,每一个节点加入后能够 造成的贡献 要加上他的子串的贡献 至于DP: 设f[i][j]表示已经使用了i个字母 当前在Trie树的第j个节点上面能够产生的最大贡献 很显然,转移到他的儿子节点上面,同时统计贡献即可 #include<iostream> #include<cstdio> #include<cstdlib> #inc…
冲刺阶段的首篇题解! 题目链接:P2967 [USACO09DEC]视频游戏的麻烦Video Game Troubles: 题目概述: 总共N个游戏平台,金额上限V元,给出每个游戏平台的价钱和其上游戏数量: 每个游戏有一个花费及愉悦值,求在花费不超上限的情况下,最大的愉悦值. (1 <= N <= 50) (1 <= V <= 100,000) 每个游戏平台价格(1 <= P_i <= 1000) 每个平台游戏数量(1 <= G_i <= 10) 每个游戏价…