题解

dp[i][j][S]表示区间[i,j]内剩余的数位状压后为S的最大值

这样转移起来不就是\(n^3 2^8\)了吗

冷静一下,我们可以发现一段区间内剩下的数位的个数是一定的,也就是我们可以在枚举位数上减少一定复杂度

我们转移的时候枚举一个末尾,也就是

\(dp[i][j][S] = dp[i][k][S >> 1] + dp[k + 1][j][S & 1]\)

我们还需要保证[k + 1,j]的长度-1后是(K - 1)的倍数

这样的话最后跑得还是很快的

代码

#include <bits/stdc++.h>
#define enter putchar('\n')
#define space putchar(' ')
#define pii pair<int,int>
#define fi first
#define se second
#define MAXN 100005
#define pb push_back
//#define ivorysi
using namespace std;
typedef long long int64;
typedef double db;
template<class T>
void read(T &res) {
res = 0;T f = 1;char c = getchar();
while(c < '0' || c > '9') {
if(c == '-') f = -1;
c = getchar();
}
while(c >= '0' && c <= '9') {
res = res * 10 + c - '0';
c = getchar();
}
res *= f;
}
template<class T>
void out(T x) {
if(x < 0) {x = -x;putchar('-');}
if(x >= 10) out(x / 10);
putchar('0' + x % 10);
}
int N,K;
int64 dp[305][305][(1 << 8) + 5],val[(1 << 8) + 5],ch[(1 << 8) + 5];
char s[305];
void update(int64 &x,int64 y) {
x = max(x,y);
}
void Solve() {
read(N);read(K);
scanf("%s",s + 1);
for(int i = 0 ; i < (1 << K) ; ++i) {read(ch[i]);read(val[i]);}
memset(dp,-1,sizeof(dp));
for(int i = 1 ; i <= N ; ++i) dp[i][i][s[i] - '0'] = 0;
for(int d = 2 ; d <= N ; ++d) {
for(int i = 1 ; i <= N ; ++i) {
int j = i + d - 1;
if(j > N) break;
int t = (d - 1) % (K - 1) + 1;
if(t == 1) t = K;
for(int S = 0 ; S < (1 << t) ; ++S) {
for(int h = 0 ; h <= N ; ++h) {
int l = h * (K - 1) + 1;
if(l > d) break;
if(dp[i][j - l][S >> 1] == -1 || dp[j - l + 1][j][S & 1] == -1) continue;
if(t == K) update(dp[i][j][ch[S]],dp[i][j - l][S >> 1] + dp[j - l + 1][j][S & 1] + val[S]);
else update(dp[i][j][S],dp[i][j - l][S >> 1] + dp[j - l + 1][j][S & 1]);
}
}
}
}
int64 res = 0;
for(int S = 0 ; S < (1 << K) ; ++S) {
res = max(res,dp[1][N][S]);
}
out(res);enter;
}
int main() {
#ifdef ivorysi
freopen("f1.in","r",stdin);
#endif
Solve();
return 0;
}

【LOJ】#2063. 「HAOI2016」字符合并的更多相关文章

  1. 「HAOI2016」字符合并

    「HAOI2016」字符合并 题意: ​ 有一个长度为\(n\)的\(01\)串,你可以每次将相邻的\(k\)个字符合并,得到一个新的字符并获得一定分数.得到的新字符和分数由这\(k\)个字符确定.你 ...

  2. loj2063 「HAOI2016」字符合并

    ref #include <iostream> #include <cstring> #include <cstdio> using namespace std; ...

  3. LOJ #2359. 「NOIP2016」天天爱跑步(倍增+线段树合并)

    题意 LOJ #2359. 「NOIP2016」天天爱跑步 题解 考虑把一个玩家的路径 \((x, y)\) 拆成两条,一条是 \(x\) 到 \(lca\) ( \(x, y\) 最近公共祖先) 的 ...

  4. Loj #3059. 「HNOI2019」序列

    Loj #3059. 「HNOI2019」序列 给定一个长度为 \(n\) 的序列 \(A_1, \ldots , A_n\),以及 \(m\) 个操作,每个操作将一个 \(A_i\) 修改为 \(k ...

  5. Loj #3055. 「HNOI2019」JOJO

    Loj #3055. 「HNOI2019」JOJO JOJO 的奇幻冒险是一部非常火的漫画.漫画中的男主角经常喜欢连续喊很多的「欧拉」或者「木大」. 为了防止字太多挡住漫画内容,现在打算在新的漫画中用 ...

  6. Loj #3057. 「HNOI2019」校园旅行

    Loj #3057. 「HNOI2019」校园旅行 某学校的每个建筑都有一个独特的编号.一天你在校园里无聊,决定在校园内随意地漫步. 你已经在校园里呆过一段时间,对校园内每个建筑的编号非常熟悉,于是你 ...

  7. LOJ #2721. 「NOI2018」屠龙勇士(set + exgcd)

    题意 LOJ #2721. 「NOI2018」屠龙勇士 题解 首先假设每条龙都可以打死,每次拿到的剑攻击力为 \(ATK\) . 这个需要支持每次插入一个数,查找比一个 \(\le\) 数最大的数(或 ...

  8. loj#2013. 「SCOI2016」幸运数字 点分治/线性基

    题目链接 loj#2013. 「SCOI2016」幸运数字 题解 和树上路径有管...点分治吧 把询问挂到点上 求出重心后,求出重心到每个点路径上的数的线性基 对于重心为lca的合并寻味,否则标记下传 ...

  9. loj#2537. 「PKUWC2018」Minimax

    题目链接 loj#2537. 「PKUWC2018」Minimax 题解 设\(f_{u,i}\)表示选取i的概率,l为u的左子节点,r为u的子节点 $f_{u,i} = f_{l,i}(p \sum ...

随机推荐

  1. P4711 「化学」相对分子质量

    P4711 「化学」相对分子质量 给你一个字符串让你输出相对分子质量(弱智字符串模拟) 我比赛tm调了两个半小时啊QAQ 希望以后能增加代码力吧,纪念挂代码 Code #include<iost ...

  2. 转:EasyJSWebView

    EasyJSWebView 是类似 Android  javascriptInterface 的 uiwebview js 调用原生代码框架 示例代码: 先建一个MyJSInterface接口 @in ...

  3. C++持有Object-C对象时容易内存泄露

    在IOS项目中,可以将C++与Object-C混编,不过必须放在实现文件.mm中. 在.mm中,我们可能创建了一个C++对象A,而它持有一个Object-C对象B作为成员变量.当A对象被释放掉的时候, ...

  4. Intel 和AT&T 语法

    From:http://www.cnblogs.com/killerlegend/p/3906502.html Author:KillerLegend Date:2014.8.12 Intel和AT& ...

  5. Python json转字符串的一些细节

    要调PHP那边的接口,php那边一直都校验不过,很是郁闷.没办法,只能让人把发送成功的代码拿过来看,不过是php写的,步骤都是一样: php端: 1. json对象转json字符串. 2. 对json ...

  6. Flash数据的采集方法-搜房房价走势采集

    一般来说flash中的数据是不能被现有技术很容易采集到的,但是也不能谈flash色变,要具体问题具体分析,有些flash是可以通过一些分析发现背后的数据.然后采集就变得很容易了. 具体案例:搜房房价走 ...

  7. 编辑器之王:Emacs 和 Vim

    Emacs 是神的编辑器,而 Vim 是编辑器之神.二者为何会有如此美誉,且听本文向你一一道来. Author: Jiqing Wu email: jiqingwu@gmail.com homepag ...

  8. Postgresql数据库安装中文全文搜索插件zhparser的问题

    在PG数据库的基础上加装zhparser中文全文搜索插件,说实话,挺怕这些单独编译安装的插件的,因为安装PG数据库方法的不同,最后可能导致安装的插件各种安装不上,这里说一下我遇到的坑,系统环境是Cen ...

  9. Robotium测试套管理测试用例

    前提:已写好测试用例 新建个测试套MyTestSuite管理你需要跑的测试用例,或者将相同功能的测试用例归纳到一个测试套中 package com.robotium.test.testsuite; i ...

  10. linux limits研究

    ---------------------------------------------------------------------------------------------------- ...