「HAOI2016」字符合并
「HAOI2016」字符合并
题意:
有一个长度为\(n\)的\(01\)串,你可以每次将相邻的\(k\)个字符合并,得到一个新的字符并获得一定分数。得到的新字符和分数由这\(k\)个字符确定。你需要求出你能获得的最大分数。(\(n\le 300,k\leq8\))
题解:
关键是要想到区间dp。记\(f[i][j][s]\),表示区间\([i,j]\),合并后状态为\(s\)的最大值。注意到长度模\(k\)余\(1\)的区间都可合并成一个字符,那么转移枚举的中点每次可以跳动\(k-1\)步,\(s\)的取值为\(2\)的\((j-i) \ mod (k-1)\)次幂,当\(s\)是\(k-1\)的倍数时加上合并的贡献就可以了。
#include<bits/stdc++.h>
#define fo(i,l,r) for(ll i=l;i<=r;i++)
#define of(i,l,r) for(ll i=l;i>=r;i--)
#define fe(i,u) for(ll i=head[u];i;i=e[i].next)
#define el putchar('\n')
#define ta putchar(' ')
using namespace std;
typedef long long ll;
inline void open(const char *s)
{
#ifndef ONLINE_JUDGE
char str[20];
sprintf(str,"%s.in",s);
freopen(str,"r",stdin);
// sprintf(str,"%s.out",s);
// freopen(str,"w",stdout);
#endif
}
inline ll rd()
{
static ll x,f;
x=0;f=1;
char ch=getchar();
for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';
return f>0?x:-x;
}
const int N=310;
int n,m;
char s[N];
ll a[N],b[N],f[N][N][256];
int main()
{open("hh");
n=rd();m=rd();
scanf("%s",s+1);
ll Max=(1<<m)-1;
fo(i,0,Max)a[i]=rd(),b[i]=rd();
memset(f,-0x3f,sizeof f);
of(i,n,1)fo(j,i,n){
if(i==j){f[i][j][s[i]-48]=0;continue;}
ll L=j-i;L%=(m-1);if(!L)L+=(m-1);
for(ll mid=j;mid>i;mid-=m-1)fo(s,0,(1<<L)-1){
f[i][j][s<<1]=max(f[i][j][s<<1],f[i][mid-1][s]+f[mid][j][0]);
f[i][j][s<<1|1]=max(f[i][j][s<<1|1],f[i][mid-1][s]+f[mid][j][1]);
}
if(L==m-1){
static ll g[2];g[0]=g[1]=f[0][0][0];
fo(s,0,(1<<m)-1)g[a[s]]=max(g[a[s]],f[i][j][s]+b[s]);
f[i][j][0]=g[0];
f[i][j][1]=g[1];
}
}
ll ans=0;
fo(i,0,Max)ans=max(ans,f[1][n][i]);
cout<<ans<<endl;
return 0;
}
「HAOI2016」字符合并的更多相关文章
- 【LOJ】#2063. 「HAOI2016」字符合并
题解 dp[i][j][S]表示区间[i,j]内剩余的数位状压后为S的最大值 这样转移起来不就是\(n^3 2^8\)了吗 冷静一下,我们可以发现一段区间内剩下的数位的个数是一定的,也就是我们可以在枚 ...
- loj2063 「HAOI2016」字符合并
ref #include <iostream> #include <cstring> #include <cstdio> using namespace std; ...
- 「BZOJ 4565」「HAOI 2016」字符合并「区间状压DP」
题意 给一个长度为\(n(\leq 300)\)的\(01\)串,每次可以把\(k(\leq 8)\)个相邻字符合并,得到新字符和一定分数,最大化最后的得分 题解 考虑设计dp:\(dp[S][i][ ...
- 【BZOJ4565】【HAOI2016】字符合并 [状压DP][区间DP]
字符合并 Time Limit: 20 Sec Memory Limit: 256 MB[Submit][Status][Discuss] Description 有一个长度为 n 的 01 串,你 ...
- 「HAOI2016」找相同字符
知识点: SA,线段树,广义 SAM 原题面 Loj Luogu 给定两字符串 \(S_1, S_2\),求出在两字符串中各取一个子串,使得这两个子串相同的方案数. 两方案不同当且仅当这两个子串中有一 ...
- 【LOJ】#2064. 「HAOI2016」找相同字符
题解 做后缀自动机题要一点脑洞,脑洞一开,就过了 我们显然要拿第二个串跑第一个串的后缀自动机 我们可以求出第二个串每个位置匹配到的节点,和匹配的长度L 那么我们统计一个后缀树上的根缀和,表示这样个节点 ...
- LG4051/BZOJ1031 「JSOI2007」字符加密 后缀数组
问题描述 BZOJ1031 LG4051 题解 发现这是一个环,根据经验,破环为链,于是字符环变为了字符串 之后对这个复制之后的字符串求后缀数组. $len$代表原字符串长度,代表复制后的字符串长度 ...
- 【LOJ】#2062. 「HAOI2016」地图
题解 我对莫队真是一无所知 这个东西显然可以用圆方树转成一个dfs序列 然后呢,用莫队计算每个询问区间的每个数出现的次数,从而顺带计算每个数字的奇偶性 但是我们要查的数字也用一个范围,可以直接用分块维 ...
- 【LOJ】#2061. 「HAOI2016」放棋子
题解 水题,可惜要写高精度有点烦 一看障碍物的摆放方式和最后的答案没有关系,于是干脆不读了,直接二项式反演可以得到 设\(g_k\)为一种摆放方式恰好占了k个障碍物 \(f_k = \sum_{i = ...
随机推荐
- MD5工具类-详细
public class MD5Code { /* * 下面这些S11-S44实际上是一个4*4的矩阵,在原始的C实现中是用#define 实现的, 这里把它们实现成为static * final是表 ...
- caffe(7) solver及其配置
solver算是caffe的核心的核心,它协调着整个模型的运作.caffe程序运行必带的一个参数就是solver配置文件.运行代码一般为 # caffe train --solver=*_slover ...
- 与 JSON 相关的一些操作 (项目中用到一部分,后续逐渐完善)
1.JSON 打印 console.log(JSON.stringify(data, null, 4)); 2.JSON 格式判断 var isjson = typeof(obj) == " ...
- JavaScript笔记(3)
•位操作符 所有的按位操作符的操作数都会被转成补码形式的有符号的32位整数. 运算符 用法 描述 按位与(AND) a & b 对于每一个比特位,只有两个操作数相应的比特位都是1时,结果才为1 ...
- qduoj~前端~二次开发
青岛大学qdu的onlinejudge是js的写的前端,框架是vue.js,在nodejs上部署运行,其实整体运行还是建立在docker的容器虚拟环境里,这里暂时不需要docker.安装环境是Ubun ...
- python语法学习笔记
函数的参数 定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来 ...
- 紫书 例题 10-18 UVa 11346(连续概率)
就是面积计算,没什么好说的. #include<cstdio> #include<cmath> #define REP(i, a, b) for(int i = (a); i ...
- CMSIS-RTOS 时间管理之时间延迟Time Delay
时间管理 Time Management 此RTOS除了可以把你的应用代码作为线程运行,它还可以提供一些时间服务功能,使用这些功能你就可以访问RTOS的一些系统调用. 时间延迟Time Delay 在 ...
- HBase快照、Snapshots 淘宝快照
淘宝在2011年之前所有的后端持久化存储基本上与我们所认知的意义, 大量存于 mysql .少量 oracle mongdb 等,使用mysql 的原因相信各位也很熟悉了. 开源.社区庞大.解决方 ...
- ArcGIS api for javascript——加入地图并显示x,y坐标
这个示例报告了用户在地图上悬停和拖拽鼠标的鼠标指针坐标.通过事件监听器来更新鼠标移到的x和y坐标. 下行代码创建了地图: var map = new esri.Map("map") ...