考试的时候由于总是搞这道题导致爆零~~~~~(神™倒序难度.....)

考试的时候想着想着想用状压,但是觉得不行又想用区间dp,然而正解是状压着搞区间,这充分说明了一件事,状压不是只是一种dp而是一种用用二进制表示状态的方法,之前打的状压dp只不过是在线性dp的时候用了这种方法。

我们发现对于一个固定长度的区间他最后缩成的位数是一定的(且属于1~k-1),而且最后的每一位的数字的来源相互独立因为他们分别完全展开之后无交。那么我们按照区间dp的一般思路,扩展长度转移状态,我们将转移来源分为两部分,设mid为中间点,mid左边贡献1位,mid右边贡献其他位,那么就可以转移了。

对于len∈[2,k-1],我们 f[i][j][s]=max(f[i][mid][s>>1],f[mid+1][j][s&1]),(f[i][j][s]在[i,j]区间上最后状态为s的最大收益)

对于len==1,我们知道出来长度为1时他的1都是缩出来的因此我们要先处理在这里(1<<k)的状态最后根据c和w再转移

注意枚举顺序!!!

#include <cstdio>
typedef long long LL;
const int MAXN=;
LL f[MAXN][MAXN][MAXN];
int n,k,full;
int len[MAXN];
int a[MAXN],c[MAXN],w[MAXN];
const LL Inf=2305843009213693952LL;
inline LL Max(LL x,LL y){
return x>y?x:y;
}
int main(){
scanf("%d%d",&n,&k);
for(int i=;i<k;i++)len[i]=i;
for(int i=k;i<=n;i++)len[i]=len[i-k+];
for(int i=;i<=n;i++)
scanf("%1d",&a[i]),f[i][i][a[i]]=,f[i][i][a[i]^]=-Inf;
for(int i=;i<(<<k);i++)
scanf("%d%d",&c[i],&w[i]);
for(int l=;l<=n;l++){
full=(<<(len[l]==?k:len[l]));
for(int i=,r=l;r<=n;i++,r++){
for(int j=;j<full;j++){
f[i][r][j]=-Inf;
for(int mid=r-;mid>=i;mid-=k-)
f[i][r][j]=Max(f[i][r][j],f[i][mid][j>>]+f[mid+][r][j&]);
}
if(len[l]==){
LL g[]={,};
for(int j=;j<full;j++)
g[c[j]]=Max(g[c[j]],f[i][r][j]+w[j]);
f[i][r][]=g[];
f[i][r][]=g[];
}
}
}
full=(<<len[n]);
LL ans=-Inf;
for(int i=;i<full;i++)
ans=Max(ans,f[][n][i]);
printf("%lld",ans);
}

【BZOJ 4565】 [Haoi2016]字符合并 区间dp+状压的更多相关文章

  1. 『字符合并 区间dp 状压dp』

    字符合并 Description 有一个长度为 n 的 01 串,你可以每次将相邻的 k 个字符合并,得到一个新的字符并获得一定分数.得到的新字符和分数由这 k 个字符确定.你需要求出你能获得的最大分 ...

  2. 【BZOJ】4565: [Haoi2016]字符合并

    4565: [Haoi2016]字符合并 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 690  Solved: 316[Submit][Status ...

  3. [BZOJ4565][HAOI2016]字符合并(区间状压DP)

    https://blog.csdn.net/xyz32768/article/details/81591955 首先区间DP和状压DP是比较明显的,设f[L][R][S]为将[L,R]这一段独立操作最 ...

  4. 2018.10.25 bzoj4565: [Haoi2016]字符合并(区间dp+状压)

    传送门 当看到那个k≤8k\le 8k≤8的时候就知道需要状压了. 状态定义:f[i][j][k]f[i][j][k]f[i][j][k]表示区间[i,j][i,j][i,j]处理完之后的状态为kkk ...

  5. BZOJ 2734: [HNOI2012]集合选数 [DP 状压 转化]

    传送门 题意:对于任意一个正整数 n≤100000,如何求出{1, 2,..., n} 的满足若 x 在该子集中,则 2x 和 3x 不能在该子集中的子集的个数(只需输出对 1,000,000,001 ...

  6. BZOJ4565 HAOI2016字符合并(区间dp+状压dp)

    设f[i][j][k]为将i~j的字符最终合并成k的答案.转移时只考虑最后一个字符是由哪段后缀合成的.如果最后合成为一个字符特殊转移一下. 复杂度看起来是O(n32k),实际常数极小达到O(玄学). ...

  7. BZOJ 2004: [Hnoi2010]Bus 公交线路 [DP 状压 矩阵乘法]

    传送门 题意: $n$个公交站点,$k$辆车,$1...k$是起始站,$n-k+1..n$是终点站 每个站只能被一辆车停靠一次 每辆车相邻两个停靠位置不能超过$p$ 求方案数 $n \le 10^9, ...

  8. BZOJ 1226: [SDOI2009]学校食堂Dining [DP 状压]

    题意: $n$个人排队打饭,第$i$个人口味$a_i$,能容忍最多身后第$b_i$个人先打饭. 先后两人$i,j$做饭时间为$a_i & a_j - a_i | a_j$ 求最少时间 一开始想 ...

  9. BZOJ 1097: [POI2007]旅游景点atr [DP 状压 最短路]

    传送门 题意: 一个无向图,从$1$到$n$,要求必须经过$2,3,...,k+1$,给出一些限制关系,要求在经过$v \le k+1$之前必须经过$u \le k+1$ 求最短路 预处理出$1... ...

随机推荐

  1. python-三级菜单的优化实现

    三级菜单需求: 1.可依次选择进入各子菜单 2.可从任意一层往回退到上一层 3.可从任意一层退出程序 所需新知识点:列表.字典 先通过字典建立数据结构 #创建字典 city_dic = { " ...

  2. DSP+ARM多核异构开发环境SYSLINK搭建OMAPL138

    DSP+ARM多核异构开发环境搭建OMAPL138 注意: 环境为Ubuntu 12.04 只能是这个环境.我甚至在Ubuntu16.04上面安装了VMware,然后,在装了一个Ubuntu 12.0 ...

  3. golang 三个点的用法

    已经忘了这是第几次查这个用法了,还是记一下吧~ ^ _ ^ 本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/137 ...

  4. java简单界面实现

    import javax.swing.JFrame; import javax.swing.JPanel; public class DemoFrame extends JFrame{ public ...

  5. Fragment保持状态切换

    在使用Activity管理多个Fragment时,每次切换Fragment使用的是replace,结果导致出现xxx is not currently in the FragmentManager异常 ...

  6. PHP.45-TP框架商城应用实例-后台20-权限管理-RBAC表构造与代码生成

    权限管理 三张主表{p39_privilege(权限).p39_role(角色).p39_admin(管理)} 两张中间表{p39_role_pri(角色-权限).p39_admin_role(管理- ...

  7. 2457: [BeiJing2011]双端队列

    2457: [BeiJing2011]双端队列 链接 很奇妙的转化. 题目要求最后的所有序列也是有序的,所以可以求出最后的序列(即排序后的序列),然后分成许多份,要求每一份都是一个双端序列,求最少分成 ...

  8. Python的异常

    一.异常的常用形式 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行.一般情况下,在Python无法正常处理程序时就会发生一个异常.异常是Python对象,表示一个错误.当Pyth ...

  9. ubuntu设置ssh登陆

    转: 默认请况下,ubuntu是不允许远程登陆的.(因为服务没有开,可以这么理解.) 想要用ssh登陆的话,要在需要登陆的系统上启动服务.即,安装ssh的服务器端 $ sudo apt-get ins ...

  10. 激活Windows Server 2008R2

    1. 用管理员身份运行mini-KMS_Activator_v1.053_ENG 2. 点击倒数第二个菜单Activation Windows VL 选择数字1 下一步选择Y 不管后面报不报错 3. ...