一看完这道题就知道是划分型dp

有两个点要注意

(1)怎么预处理子串。

表示以i为开头,结尾在j之前(含),有没有子串,有就1,没有就0

(2)dp的过程

这种分成k组最优的题目已经高度模板化了,我总结一下吧

//f[i][j]表示把前j个数分成i组的最优价值
memset(f, 0xc0, sizeof(f)); //初始化
f[0][0] = 0; //不要忘记了
_for(k, 1, K) //枚举组数
_for(i, 1, len) //前i个字符
_for(j, 1, i) //断点
f[k][i] = max(f[k][i], f[k-1][j-1] + sum[j][i]); //字母不要写错
printf("%d\n", f[K][len]);

最后用string可以很方便的连接字符串,直接+=

char的话用strcat, stract(a, b)表示把b连到a后面

#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<iostream>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
#define _for(i, a, b) for(int i = (a); i <= (b); i++)
using namespace std; const int MAXN = 212;
string s, t, word[10];
int p, K, n, sum[MAXN][MAXN], f[MAXN][MAXN]; bool judge(int i, int j)
{
REP(r, 0, n)
{
int len = word[r].length();
if(len > (j - i + 1)) continue;
REP(k, 0, len)
{
if(word[r][k] != s[i+k]) break;
if(k == len - 1) return true;
}
}
return false;
} int main()
{
while(~scanf("%d%d", &p, &K))
{
s = "0";
REP(i, 0, p)
{
cin >> t;
s += t;
}
p *= 20;
scanf("%d", &n);
REP(i, 0, n) cin >> word[i]; memset(sum, 0, sizeof(sum));
_for(j, 1, p)
for(int i = j; i >= 1; i--)
sum[i][j] = sum[i+1][j] + judge(i, j); memset(f, 0xc0, sizeof(f));
f[0][0] = 0;
_for(k, 1, K)
_for(i, 1, p)
_for(r, 1, i)
f[k][i] = max(f[k][i], f[k-1][r-1] + sum[j][i]);
printf("%d\n", f[K][p]);
} return 0;
}

最新文章

  1. Spring 4 异常处理
  2. ubuntu 14 谷歌拼音输入法
  3. [CareerCup] 16.6 Synchronized Method 同步方法
  4. 【MySQL】过滤后的结果集较大,用LIMIT查询分页记录,查询效率不理想
  5. WP开发笔记——控件倾斜效果
  6. JavaScript 继承方式的实现
  7. HTTP协议中的1xx,2xx,3xx,4xx,5xx状态码分别表示什么,列举常见错误码及含义
  8. 创建Material Design风格的Android应用--使用Drawable
  9. IntelliJ IDEA插件——冷门神器分享
  10. 德邦总管 修改oracle数据库用户密码的方法
  11. 动态调试|Maccms SQL 注入分析(附注入盲注脚本)
  12. Flask从入门到精通
  13. 【算法和数据结构】_16_小算法_IntToStr: 将整型数据转换为字符串
  14. UI学习网站
  15. CentOS安装PHP7+Nginx+MySQL
  16. MVC4.0中cshtml中怎么解析html编码
  17. 几张图理解Roll, Pitch, Yaw的含义
  18. 创业就是和靠谱的人一起做热爱的事 印象笔记CEO谈创业
  19. HDU 4670 Cube number on a tree ( 树的点分治 )
  20. java - 百钱百鸡小算法

热门文章

  1. 粘包_Server
  2. 8:30+1.5小时,返回时间格式的 php函数
  3. spring security中当前用户信息
  4. [terry笔记]python FTP
  5. maven规定的目录
  6. poj2528 Mayor&amp;#39;s posters(线段树,离散化)
  7. 安卓APP载入HTML5页面解决方式总结
  8. sql两个字段相加减,第三个字段没有值的原因.
  9. silverlight wpf Command提交时输入验证
  10. NOIP2017提高组模拟赛 7(总结)