令fi,j,kf_{i,j,k}表示区间[i,j][i,j]合并成kk的最大收益,其中K=0/1K=0/1保证[i,j][i,j]可以合并成一个数。
转移的时候用gj,kg_{j,k}表示对于当前的ii,[i,j][i,j]合并成了kk,其中kk是一个二进制数。
然后转移一下就行了

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;const int N=305;
int n,m;
int a[N],c[N],w[N];
long long f[N][N][2],g[N][N],tmp[2],ans[N];
char s[N];inline int read()
{int a=0,f=1; char c=getchar();while (c<'0'||c>'9') {if (c=='-') f=-1; c=getchar();}while (c>='0'&&c<='9') {a=a*10+c-'0'; c=getchar();}return a*f;
}int main()
{   n=read(); m=read(); memset(f,-1,sizeof(f));scanf("%s",s+1);for (int i=1;i<=n;i++) f[i][i][s[i]-'0']=0;for (int i=0;i<1<<m;i++)c[i]=read(),w[i]=read();for (int i=n-m+1;i;i--){memset(g,-1,sizeof(g));int now=1;g[i][0]=f[i][i][0];g[i][1]=f[i][i][1];for (int j=i+1;j<=n;j++){for (int s=0;s<1<<now;s++)if (g[j-1][s]>=0)for (int k=j;k<=n;k+=m-1){if (f[j][k][0]>=0)g[k][s<<1]=max(g[k][s<<1],g[j-1][s]+f[j][k][0]);if (f[j][k][1]>=0)g[k][s<<1|1]=max(g[k][s<<1|1],g[j-1][s]+f[j][k][1]);}if (++now==m){memset(tmp,-1,sizeof(tmp));for (int s=0;s<1<<m;s++)if (g[j][s]>=0) tmp[c[s]]=max(tmp[c[s]],w[s]+g[j][s]);f[i][j][0]=g[j][0]=tmp[0];f[i][j][1]=g[j][1]=tmp[1];now=1;}}}for (int i=1;i<=n;i++)for (int j=i;j<=n;j+=m-1)ans[j]=max(ans[j],ans[i-1]+max(f[i][j][0],f[i][j][1]));cout << ans[n] << endl;return 0;
}

4565: [Haoi2016]字符合并 区间DP相关推荐

  1. 【BZOJ 4565】 [Haoi2016]字符合并 区间dp+状压

    考试的时候由于总是搞这道题导致爆零~~~~~(神™倒序难度.....) 考试的时候想着想着想用状压,但是觉得不行又想用区间dp,然而正解是状压着搞区间,这充分说明了一件事,状压不是只是一种dp而是一种 ...

  2. [HAOI2016]字符合并(ing)

    [HAOI2016]字符合并 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 有一个长度为 ...

  3. [BZOJ4565][Haoi2016]字符合并(区间状压dp)

    Address https://www.lydsy.com/JudgeOnline/problem.php?id=4565 Solution 区间合并让人想到区间 dp ,而 k≤8k≤8k\le8 ...

  4. bzoj4565 [HAOI2016]字符合并 结论+状压+区间dp

    如果k==2的话就是记搜, 但这个题用记搜的思路的话是需要枚举k个断点的, 所以对于枚举断点,就很可能有优化,比如到一个断点,一个决策的最优值 于是考虑区间dp模型,相当于是插入一个数,然后看影响. ...

  5. 编程之美2015资格赛 题目2 : 回文字符序列 [ 区间dp ]

    传送门 题目2 : 回文字符序列 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定字符串,求它的回文子序列个数.回文子序列反转字符顺序后仍然与原序列相同.例如字符串ab ...

  6. AcWing.282石子合并(区间DP)题解

    石子合并 题目描述 设有N堆石子排成一排,其编号为1,2,3,-,N. 每堆石子有一定的质量,可以用一个整数来描述,现在要将这N堆石子合并成为一堆. 每次只能合并相邻的两堆,合并的代价为这两堆石子的质 ...

  7. 题目2 : 回文字符序列(区间DP)

    时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定字符串,求它的回文子序列个数.回文子序列反转字符顺序后仍然与原序列相同.例如字符串aba中,回文子序列为"a& ...

  8. 【题解】poj1738石子合并 区间DP 加西亚瓦克斯算法

    题目链接 乍一看很激动(诶辣鸡题才做过)然后n=4e4+o(n^3)=GG GarsiaWachs算法 或者四边形优化(还是GG不用搞了)(以后自己写一遍) 还可以加上个平衡树(憋说了--) step ...

  9. 上元节的灯会(灭)-区间dp

    题目背景 上元节的庙会上,牛宝靠自己的聪明才智成功破解了花灯阵,点亮了在场所有花灯,但他没料到的是这个游戏包含AB两个项目,A项目就是点亮所有花灯,而B项目则是熄灭所有花灯.不过点亮的是花灯阵,熄灭的 ...

  10. CodeM美团点评编程大赛初赛A轮 B.合并回文子串【区间Dp】

    [编程题] 合并回文子串 时间限制:2秒 空间限制:262144K 输入两个字符串A和B,合并成一个串C,属于A和B的字符在C中顺序保持不变.如"abc"和"xyz&qu ...

最新文章

  1. android启动程序唤起其它app,安卓和rn唤起其他app应用
  2. IDEA 搭建 maven(1)
  3. Kubernetes二次开发--Operator的使用
  4. 没有学过功夫能否练神功
  5. 难忘昨夜,同事升职,崇文门乐盛k歌,真心有感
  6. C#中在主窗体中用ShowDialog方法显示子窗体的使用技巧
  7. 并查集一般高级应用的理解
  8. 查找 - 计算式查找法 - 哈希法
  9. 查找算法------顺序查找
  10. 扫描仪服务器正在运行中,针对使用 Acrobat 时出现的扫描仪问题的故障排除提示...
  11. 百度,阿里,搜狐公司社招面试题及总结
  12. C# Predefined type 'System.Object' is not defined or imported
  13. 飞冰 前端开发的一些坑
  14. linux 可道云_Aria2+KodExplorer可道云实现离线下载
  15. 云服务器的使用(一)
  16. CSS transform属性的简单应用——双开门动画效果
  17. python生存曲线_生存曲线的估计方法(3):寿命表法
  18. 5G室内定位来了,化工厂人员定位,电厂室内定位都有用它!-新导智能
  19. 随笔 qsnctf misc三体
  20. Root作对数坐标图及蒙卡随机模拟

热门文章

  1. 期货反向跟单—日内交易是否合适
  2. html5 paint,html5实现仿windows画图工具的画图工具jspaint
  3. C++程序设计谭浩强 第三章(程序设计初步)习题答案(部分有改进)
  4. app指纹登录 java后端_Android应用实现指纹登录
  5. 游戏渠道SDK-Android
  6. python 广告联盟_谷歌广告月入10000美金的一些经验谈
  7. pt100铂电阻的原理及用法
  8. 查看当前python环境_python-环境
  9. 推荐歌曲《 起风了》
  10. 小知识点日记 2013-1-17 至 2013-6-13