博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【NOIP2001】统计单词个数
阅读量:4599 次
发布时间:2019-06-09

本文共 1791 字,大约阅读时间需要 5 分钟。

本题在洛谷上的链接:https://www.luogu.org/problemnew/show/P1026


 

比较考验动规技巧及代码能力的一道题。题目描述的并不算太清晰,简单解释一下,就是说,把一个字符串划成k份,对于每一份单独统计里面出现的单词的个数,注意,对于同一个字母,最多匹配到一个单词,然后把统计的个数相加,现在想让这个和最多,问你最大值是多少。

设dp[i][j]为将[1,i]划分成j份的单词数之和的最大值。那么dp[i][j]=max(dp[i][j],dp[p][j-1]+cnt[p+1][i])。其中cnt[p+1][j]表示[p+1,j]中能匹配到多少个单词。

一开始我们需要先预处理出cnt来,先简单匹配一下,KMP或暴力都行,然后用cnt[i][j]=cnt[i][j-1]+cnt[i+1][j]-cnt[i+1][j-1]枚举区间长度推出所有的cnt。然后预处理一下dp[i][1]=cnt[1][i],再跑DP就可以了。

1 #include 
2 #include
3 4 using namespace std; 5 6 int cnt[205][205], dp[205][45]; 7 char s[205], w[10][25]; 8 9 int main() {10 int p, k, wc, n;11 char c;12 scanf("%d%d", &p, &k);13 for (int i = 1; i <= p; ++i)14 for (int j = 1; j <= 20; ++j) {15 while ((c = getchar()) == '\n' || c == ' ' || c == '\r');16 s[20 * (i - 1) + j] = c;17 }18 scanf("%d", &wc);19 for (int i = 1; i <= wc; ++i)20 scanf("%s", w[i] + 1);21 n = 20 * p;22 for (int i = 1; i <= n; ++i)23 for (int j = 1; j <= wc; ++j)24 for (int k = 1; w[j][k]; ++k) {25 if (s[i + k - 1] != w[j][k]) break;26 if (!w[j][k + 1]) cnt[i][i + k - 1] = 1;27 }28 for (int l = 1; l <= n; ++l)29 for (int i = 1; i <= n - l + 1; ++i) {30 int j = i + l - 1;31 cnt[i][j] += cnt[i][j - 1] + cnt[i + 1][j] - cnt[i + 1][j - 1];32 }33 for (int i = 1; i <= n; ++i) dp[i][1] = cnt[1][i];34 for (int j = 2; j <= k; ++j)35 for (int i = 1; i <= n; ++i)36 for (int p = j - 1; p < i; ++p)37 dp[i][j] = max(dp[i][j], dp[p][j - 1] + cnt[p + 1][i]);38 printf("%d", dp[n][k]);39 return 0;40 }
AC代码

 

转载于:https://www.cnblogs.com/Mr94Kevin/p/9801777.html

你可能感兴趣的文章
python-haproxy作业讲解视频总结
查看>>
批处理文件脚本总结
查看>>
快速排序C++代码
查看>>
mui搜索框 搜索点击事件
查看>>
bzoj 5289: [Hnoi2018]排列
查看>>
joomla处境堪忧
查看>>
Jquery-AJAX
查看>>
mysql命令gruop by报错this is incompatible with sql_mode=only_full_group_by
查看>>
LeetCode55 Jump Game
查看>>
poj 3764 The xor-longest Path (01 Trie)
查看>>
预备作业01
查看>>
【Spark】Spark-Redis连接池
查看>>
【云计算】使用supervisor管理Docker多进程-ntpd+uwsgi+nginx示例最佳实践
查看>>
Ubuntu16.04下配置ssh免密登录
查看>>
实验二 2
查看>>
will-change属性
查看>>
android学习笔记54——ContentProvider
查看>>
Unity3d android开发之触摸操作识别-双击,滑动去噪处理
查看>>
Custom view * is not using the 2- or 3-argument View constructors; XML attributes will not work
查看>>
模型选择准则
查看>>