题意

给一个长度为\(n(\leq 300)\)的\(01\)串,每次可以把\(k(\leq 8)\)个相邻字符合并,得到新字符和一定分数,最大化最后的得分

题解

考虑设计dp:\(dp[S][i][j]\)表示区间\([i, j]\)合并为\(S\),最大得分是多少。

这么考虑一定是不遗漏的。如果\([i, j]\)留下来的区间长度\(>k\),那这个合并方案一定会在包含它的大区间计算到,所以我们只考虑能合并都合并完的情况

枚举缩完最后一个位是啥,这对应\([i, j]\)的一个长度\(\bmod k-1\)为\(1\)后缀

然后再考虑这个区间缩成一个字符的情况。由于顺序混乱(比如\(0\)更新\(1\),\(1\)又更新\(0\)),拿临时数组存,最后再赋值回去

#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std; typedef long long ll; const int N = 310; int n, k, c[1 << 8], la[N];
ll w[1 << 8], g[2], dp[1 << 8][N][N];
char s[N]; void upd(ll &x, ll y) { x = max(x, y); } int main() {
scanf("%d%d%s", &n, &k, s + 1);
for(int i = 0; i < (1 << k); i ++) scanf("%d%lld", c + i, w + i);
for(int i = 1, j; i <= n; i ++) {
for(j = i; j >= k; j = j - k + 1);
la[i] = j;
}
memset(dp, -1, sizeof dp);
for(int i = 1; i <= n; i ++) dp[s[i] -= '0'][i][i] = 0;
for(int i = n - 1; i >= 1; i --) {
for(int j = i + 1; j <= n; j ++) {
for(int u = j; u > i; u -= k - 1) {
for(int S = 0; S < (1 << la[u - i]); S ++) if(~ dp[S][i][u - 1]) {
if(~ dp[0][u][j]) upd(dp[S << 1][i][j], dp[S][i][u - 1] + dp[0][u][j]);
if(~ dp[1][u][j]) upd(dp[S << 1 | 1][i][j], dp[S][i][u - 1] + dp[1][u][j]);
}
}
if(la[j - i + 1] == 1) {
g[0] = g[1] = -1;
for(int S = 0; S < (1 << k); S ++) if(~ dp[S][i][j]) {
upd(g[c[S]], dp[S][i][j] + w[S]);
}
dp[0][i][j] = g[0]; dp[1][i][j] = g[1];
}
}
}
ll ans = -1;
for(int S = 0; S < (1 << (k - 1)); S ++)
upd(ans, dp[S][1][n]);
printf("%lld\n", ans);
return 0;
}

最新文章

  1. C#设计模式之工厂方法
  2. 中英文维基百科语料上的Word2Vec实验
  3. 【BZOJ1088】[SCOI2005]扫雷Mine 递推
  4. C/C++中的指针数组和数组指针
  5. python--&gt;基础--&gt;002--&gt;input &amp; raw_input
  6. 使用iScroll实现上拉或者下拉刷新
  7. BZOJ-1880 Elaxia的路线 SPFA+枚举
  8. android实现系统电话通话过程中自动感应黑屏
  9. ubuntu1404_server搭建lamp
  10. input输入框的border-radius属性在IE8下的完美兼容
  11. C++学习笔记(一):头文件和源文件
  12. form表单标签的enctype属性的作用
  13. 在Windows通过使用MinGW静态编译Assimp
  14. 洛谷-语文成绩-[有奖]洛谷5月月赛:kkksc03的三大神器
  15. Java与C/C++有什么区别?
  16. C# 利用ReportViewer生成报表
  17. 【noip模拟赛6】收入计划 最大值的最小值 二分答案
  18. 文件上传以及JS链式结构
  19. 【Linux】ssh建立隧道tunnel连接到内网设备
  20. openssl解析国密X509证书

热门文章

  1. 基于LINUX下的进程管理问题
  2. luogu P4762 [CERC2014]Virus synthesis (回文自动机)
  3. 4、Wepy-Redux基本使用 参考自https://blog.csdn.net/baidu_32377671/article/details/86708019
  4. ADO与达梦7产生的一个未知问题
  5. 1.IOC原理模拟
  6. php-amqplib库操作RabbitMQ
  7. js 数值精确运算使用math.js
  8. docker-compose 编排文件小疑点
  9. JQuery初始加载时注册文本框失去焦点事件
  10. C - Calculation 2 HDU - 3501 (欧拉)