P1026 统计单词个数 区间dp
题目描述
给出一个长度不超过200200的由小写英文字母组成的字母串(约定;该字串以每行2020个字母的方式输入,且保证每行一定为2020个)。要求将此字母串分成kk份(1<k \le 401<k≤40),且每份中包含的单词个数加起来总数最大(每份中包含的单词可以部分重叠。当选用一个单词之后,其第一个字母不能再用。例如字符串thisthis中可包含thisthis和isis,选用thisthis之后就不能包含thth)。
单词在给出的一个不超过66个单词的字典中。
要求输出最大的个数。
输入输出格式
输入格式:
每组的第一行有22个正整数(p,kp,k)
pp表示字串的行数,kk表示分为kk个部分。
接下来的pp行,每行均有2020个字符。
再接下来有11个正整数ss,表示字典中单词个数。(1 \le s \le 61≤s≤6)
接下来的ss行,每行均有11个单词。
输出格式:
11个整数,分别对应每组测试数据的相应结果。
输入输出样例
说明
this/isabookyoua/reaoh
一共有两个dp
第一个dp为预处理
必须要从后往前转移 这样遇到重复的也不会影响结果 如题意所得 每次判断具有后效性 所以当遇到这种情况的时候一定要从后往前dp 之前有一道安排工作的dp也是一样!!!!
注意 预处理的细节
第二个dp为区间dp
划分为k个区域只要加上k-1个隔板即可
然后就是注意 区间dp各种小细节!!!!
我做的时候有个疑问 为什么分隔点是s后面 而不能是当前处理区间末尾的前面一格分隔
想一想就知道是错的!!!。。。
#include<bits/stdc++.h>
using namespace std;
//input by bxd
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define repp(i,a,b) for(int i=(a);i>=(b);i--)
#define RI(n) scanf("%d",&(n))
#define RII(n,m) scanf("%d%d",&n,&m)
#define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
#define RS(s) scanf("%s",s);
#define LL long long
#define REP(i,N) for(int i=0;i<(N);i++)
#define CLR(A,v) memset(A,v,sizeof A)
//////////////////////////////////
#define inf 2147483647
#define N 200
string s;
int k,q,n;
string table[];
int word[][];
int dp[][];
int len;
bool check(int i,int j)
{
/* string temp=s.substr(i,j-i+1);
rep(i,1,q)if(temp.find(table[i])==0)return true;
*/
rep(k,,q)
{
if(table[k].size()>j-i+)continue;
if(s.substr(i,table[k].size())==table[k])return true;
}
return false;
}
void init()
{
repp(j,len,)
repp(i,j,)
{
word[i][j]=word[i+][j];
if(check(i,j))word[i][j]++;
}
}
int main()
{
RII(n,k);
rep(i,,n)
{
string temp;
cin>>temp;
s+=temp;
}
len=s.size();
s='*'+s;//方便处理
RI(q);
rep(i,,q)
cin>>table[i];
init();
rep(i,,len)
dp[i][]=word[][i]; rep(i,,k-)//加入k-1个 分隔 最后就会分成k块
rep(j,i+,len)
rep(s,i,j-)//枚举断点s
dp[j][i]=max(dp[j][i],dp[s][i-]+word[s+][j]);//我不知道为什么改成word[s][j-1]不行 (否则 第三层循环没有任何意义 答案永远不会再更新了!!!) cout<<dp[len][k-];
}
P1026 统计单词个数 区间dp的更多相关文章
- [luogu]P1026 统计单词个数[DP][字符串]
[luogu]P1026 统计单词个数 题目描述 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个).要求将此字母串分成k份(1&l ...
- luogu P1026 统计单词个数
题目链接 luogu P1026 统计单词个数 题解 贪心的预处理母本串从i到j的最大单词数 然后dp[i][j] 表示从前i个切了k次最优解 转移显然 代码 #include<cstdio&g ...
- P1026 统计单词个数——substr
P1026 统计单词个数 string 基本操作: substr(x,y) x是起始位置,y是长度: 返回的是这一段字符串: 先预处理sum[i][j],表示以i开头,最多的单词数: 从后往前寻找,保 ...
- 洛谷P1026 统计单词个数【区间dp】
题目:https://www.luogu.org/problemnew/show/P1026 题意: 给定一个字符串,要求把他分成k段.给定s个单词,问划分成k段之后每段中包含的单词和最大是多少. 一 ...
- 【dp】P1026 统计单词个数
题目描述 给出一个长度不超过200200的由小写英文字母组成的字母串(约定;该字串以每行2020个字母的方式输入,且保证每行一定为2020个).要求将此字母串分成kk份(1<k \le 401& ...
- 洛谷 P1026 统计单词个数 Label:dp
题目描述 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个).要求将此字母串分成k份(1<k<=40),且每份中包含的单 ...
- P1026 统计单词个数 (动态规划)
题目描述 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个).要求将此字母串分成k份(1<k<=40),且每份中包含的单 ...
- [NOIP2001] 提高组 洛谷P1026 统计单词个数
题目描述 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保 证每行一定为20个).要求将此字母串分成k份(1<k<=40),且每份中包含的 ...
- NOIP2001统计单词个数[序列DP]
题目描述 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个).要求将此字母串分成k份(1<k<=40),且每份中包含的单 ...
随机推荐
- MySQL NULL处理
-- 首先在用户表中插入数据如下 TRUNCATE TABLE UserInfo ; INSERT INTO `userinfo`(`ID`,`UserName`,`UserLogin`,`User ...
- 洛谷P5110 块速递推 [分块]
传送门 思路 显然可以特征根方程搞一波(生成函数太累),得到结果: \[ a_n=\frac 1 {13\sqrt{337}} [(\frac{233+13\sqrt{337}}{2})^n-(\fr ...
- C# Excel行高、列宽、合并单元格、单元格边框线、冻结
private _Workbook _workBook = null;private Worksheet _workSheet = null;private Excel.Application _ex ...
- Confluence 6 后台中的默认空间模板设置
Confluence 6 后台中的默认空间模板设置界面的布局. https://www.cwiki.us/display/CONFLUENCEWIKI/Customizing+Default+Spac ...
- LeetCode(119):杨辉三角 II
Easy! 题目描述: 给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 3 输出: [1,3,3,1] 进阶: ...
- laravel 多检索条件列表查询
public function indexQuestions(Request $request, ResponseFactoryContract $response, QuestionModel $q ...
- 批量杀掉多个pid文件中记录的pid进程, 并集成到shell脚本中
head_files=`find ./fmsConf/ -name "*.pid"` for file in $head_files do cat $file | awk rm - ...
- js 浮点数相加 变成字符串 解决方案
var count = 0; count+=Number(parseFloat(value[i]['sla']).toFixed(2)); 数字相加的时候最好使用Number转换一下
- youtube-dl更新出错解决办法
youtube-dl更新命令: youtube-dl -U 更新报错:无法识别当前版本 ERROR: can't find the current version. Please try again ...
- WPF:如何高速更新Model中的属性
原文:[WPF/MVVM] How to deal with fast changing properties In this article, I will describe a problem w ...