区间+状压 [Haoi2016]字符合并

【BZOJ4565】【状压DP】【区间DP】[Haoi2016]字符合并 题解 Description有一个长度为 n 的 01 串,你可以每次将相邻的 k 个字符合并,得到一个新的字符并获得一定分数。得到的新字 符和分数由这 k 个字符确定。你需要求出你能获得的最大分数。 Input第一行两个整数n,k。接下来一行长度为n的01串,表示初始串。接下来2k行,每行一个字符ci和一个整数wi,ci 表示长度为k的01串连成二进制后按从小到大顺序得到的第i种合并方案得到的新字 阅读详情

问题 A: [Haoi2016]字符合并
时间限制: 2 Sec 内存限制: 256 MB
提交: 73 解决: 35
[提交][状态][讨论版]
题目描述
有一个长度为 n 的 01 串,你可以每次将相邻的 k 个字符合并,得到一个新的字符并获得一定分数。得到的新字
符和分数由这 k 个字符确定。你需要求出你能获得的最大分数。
输入
第一行两个整数n,k。接下来一行长度为n的01串,表示初始串。接下来2k行,每行一个字符ci和一个整数wi,ci
表示长度为k的01串连成二进制后按从小到大顺序得到的第i种合并方案得到的新字符,wi表示对应的第i种方案对应
获得的分数。1<=n<=300,0<=ci<=1,wi>=1,k<=8
输出
输出一个整数表示答案

样例输入
3 2
101
1 10
1 10
0 20
1 30
样例输出
40
//第3行到第6行表示长度为2的4种01串合并方案。00->1,得10分,01->1得10分,10->0得20分,11->1得30分。
因为最多只有8位,可以考虑状压。f[i][j][k]表示区间i~j缩到只剩下k状态时,最大和。
那么就得考虑怎么转移了。首先要枚举每个区间这没问题,不可能剩余>k位,而每次合并都会减少k-1位,所以在当前枚举的区间,确定能缩的全部缩完后,还剩下多少个点,记为len。那么最多会有1<

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
int read()
{
    int sum=0,f=1;char x=getchar();
    while(x<'0'||x>'9'){if(x=='-')f=-1;x=getchar();}
    while(x>='0'&&x<='9'){sum=(sum<<1)+(sum<<3)+x-'0';x=getchar();}
    return sum*f;
}
int n,m,b[(1<<8)+2];
ll f[305][305][(1<<8)+2],v[(1<<8)+2];
char s[305];
int yjn()
{
    freopen("merge.in","r",stdin);
    freopen("merge.out","w",stdout);
    memset(f,-1,sizeof(f));
    n=read();m=read();
    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++)
    {
        b[i]=read();v[i]=read();
    }
    for(int l=2;l<=n;l++)
       for(int i=1;i<=n-l+1;i++)
       {
            int j=i+l-1;
            int len=j-i+1;
            while(len>m)len-=m-1;
            for(int k=j;k>=i;k-=m-1)
                for(int S=0;S<(1<<len);S++)
                {
                    if(f[i][k-1][S]!=-1&&f[k][j][0]!=-1)
                       f[i][j][S<<1]=max(f[i][j][S<<1],f[i][k-1][S]+f[k][j][0]);
                    if(f[i][k-1][S]!=-1&&f[k][j][1]!=-1)
                       f[i][j][S<<1|1]=max(f[i][j][S<<1|1],f[i][k-1][S]+f[k][j][1]);
                }
            if(len==m)
            {
                ll g[2]={-1,-1};
                for(int k=0;k<(1<<m);k++)
                  if(f[i][j][k]!=-1)
                     g[b[k]]=max(g[b[k]],f[i][j][k]+v[k]);
                f[i][j][0]=g[0];
                f[i][j][1]=g[1];

            }
       }
    ll ans=0;
    for(int i=0;i<(1<<m);i++)
       if(f[1][n][i]!=-1)
          ans=max(ans,f[1][n][i]);
    cout<<ans;
}
int qty=yjn();
int main(){;}
论文阅读——Bayesian Knowledge Fusion(贝叶斯知识融合) 该篇论文解决了不确定环境中的信息融合问题。想象一下,有多位专家针对同一情况构建概率模型,我们希望汇总他们提供的信息。直接合并每个信息可能会遇到几个问题。例如,专家们可能不同意某个事件发生的概率,或者他们可能不同意两个事件之间因果关系的方向(例如,一个人认为 A 导致 B,而另一个人认为 B 导致 A)。他们甚至可能不同意概率网络中一组变量之间的整个依赖结构。 阅读详情

相关推荐

java实现自动发送微信QQ消息(可发图片)

自动发送微信/QQ/微博等消息 一:功能:实现发送QQ/微信/微博消息,程序控制。 效果演示(实现自动发生QQ微信消息给女友,发微博信息也可以就不演示了) 二:原理讲解:将剪贴板的内容给发送到QQ微信中去,复制粘贴发送。 模拟真实操作进行发送信息。 三:前期准备,软件安装,及初步测试。...

XURUNFA950827的博客 1万+

【题解】「HAOI2016」字符合并

题目描述 有一个长度为n 的01 串,你可以每次将相邻的k 个字符合并,得到一个新的字符并获得一定分数。得到的新字符和分数由这k 个字符确定。你需要求出你能获得的最大分数。 solution: 可以看出本题的解法是区间DP。我们发现,区间[l,r]每次操作的区间不会有交集,因为假设最后只剩了几个点,但这几个点其实是有一个完整的区间变过来的。换句话说,在最后一次合并之前,左右两个区间应该是独立操作的。我们称这样的问题具有可划分性。 再看数据n<=300n<=300n<=300,可以放心大胆地

cqbzlydd的博客 703

Facebook登录协议逆向实战:从加密参数到完整流程解析(附Python代码)

本文深入解析了Facebook登录协议的逆向工程实战,详细拆解了从关键加密参数(如`lgndim`、`encpass`)定位到完整登录流程的实现。文章提供了Python代码示例,重点阐述了加密逻辑的深度解析、加密函数的本地化实现,并解决了Crypto.js异步调用等常见问题,为研究Web安全和协议逆向的开发者提供了实用参考。

metal的博客 1311

「HAOI2016」字符合并

「HAOI2016」字符合并 题意: ​ 有一个长度为\(n\)的\(01\)串,你可以每次将相邻的\(k\)个字符合并,得到一个新的字符并获得一定分数。得到的新字符和分数由这\(k\)个字符确定。你需要求出你能获得的最大分数。(\(n\le 300,k\leq8\)) 题解: ​ 关键是要想到区间dp。记\(f[i][j][s]\),表示区间\([i,j]\),合并后状态为\(s\)的...

andy_zeng123456的博客 207

整理 钢琴 铃木钢琴教程(铃木)

铃木钢琴 超清PDF

TS的博客 1213

2026 年 3 月青少年软编等考 C/C++ 三级测试题解析

摘要 本文包含三部分内容: 单选题(10题):考察C++基础语法和数据结构知识,涉及vector、栈、队列的操作和特性。 判断题(10题):测试对动态数组、栈、队列、字符串操作的理解,包括内存管理、访问方式和函数返回值等。 编程题(1题):模拟火车站售票窗口排队场景,要求根据输入输出各窗口的排队情况,重点考查队列的实际应用和边界条件处理。 答案解析详细,涵盖常见编程考点,适合检验基础知识的掌握程度。

发布少儿编程考级的真题和优秀竞赛题解析,以及一些讲义。 251

[BZOJ 4565][HAOI 2016] 字符合并 状压DP+区间DP

题目传送门:【BZOJ 4565】题目大意:有一个长度为 n 的 01 串,你可以每次将相邻的 k 个字符合并,得到一个新的字符并获得一定分数。得到的新字符以及得到的分数由这 k 个字符确定。你需要求出你能获得的最大分数。输入第一行为两个整数 n,k。接下来一行为长度为 n 的 01 串,表示初始串。接下来 2k2^k 行,每行一个字符 ci_i 和一个整数 wi_i,ci_i 表示长度为 k 的

江澤妮可 884

飞塔CVE-2022-40684复现

admin 无密码直接回车(会提示修改密码)

G3et的博客 1145

loj2063 「HAOI2016」字符合并

ref #include <iostream> #include <cstring> #include <cstdio> using namespace std; typedef long long ll; int n, k, a[305], c[305]; ll w[305], dp[305][305][265], g[2]; int main(){...

dianjiaxian1205的博客 217

python实现纵横向拉开档次法 (附完整源码)

python实现纵横向拉开档次法 (附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 778

Unity-Mirror网络框架-从入门到精通之Mirror简介

在现代游戏开发中,网络功能日益成为提升游戏体验的关键组成部分。Mirror是一个用于Unity的开源网络框架,专为多人游戏开发设计。它使得开发者能够轻松实现网络连接、数据同步和游戏状态管理。本文将深入介绍Mirror的基本概念、如何与其他网络框架进行比较,以及如何从零开始创建一个使用Mirror的简单网络项目。Mirror是一个功能强大的Lite网络框架,旨在替代Unity的UNet网络解决方案。它提供了高效的多玩家架构、简单易用的API,以及良好的社区支持。

TxNet 3088

『区间状压DP』[Haoi2016]字符合并

Problem\mathrm{Problem}Problem 有一个长度为 n 的 01 串,你可以每次将相邻的 k 个字符合并,得到一个新的字符并获得一定分数。得到的新字符和分数由这 k 个字符确定。你需要求出你能获得的最大分数。 1<=n<=300,0<=ci<=1,wi>=1,k<=8 Solution\mathrm{Solution}Solution 首...

Ronaldo7_ZYB的博客 280

三模冗余、纠错编码、单粒子翻转防护

本文探讨了高可靠性FPGA系统设计的三大关键技术:三模冗余(TMR)、纠错编码(ECC)和单粒子翻转(SEU)防护。TMR通过三个并行模块和表决器实现容错,但会增加硬件资源和功耗;ECC利用汉明码等编码方式检测和纠正数据错误,适用于存储器保护;SEU防护则针对高能粒子引发的位翻转问题,采用配置刷新、TMR和ECC等方法。文章还通过Verilog代码示例展示了这些技术的实现,并提出了一个综合应用案例,结合三种技术构建高可靠性控制系统。这些技术在航空航天、医疗设备等关键领域具有重要应用价值。

2301_79143213的博客 715

BZOJ 4565: [Haoi2016]字符合并 区间Dp+状压Dp

title BZOJ 4565 LUOGU 3736 Description 有一个长度为 n 的 01 串,你可以每次将相邻的 k 个字符合并,得到一个新的字符并获得一定分数。得到的新字符和分数由这 k 个字符确定。你需要求出你能获得的最大分数。 Input 第一行两个整数 \(n,k\)。 接下来一行长度为 \(n\) 的 \(01\) 串,表示初始串。 接下来 \(2^k\)...

dilu0653的博客 263

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

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

Address https://www.lydsy.com/JudgeOnline/problem.php?id=4565 Solution 区间合并让人想到区间 dp ,而 k≤8k≤8k\le8 又让人想到状压 dp 。 我们考虑合二为一。 f[l][r][S]f[l][r][S]f[l][r][S] 表示将区间 [l,r][l,r][l,r] 内的字符不断合并,最后变成串 SS...

女装的你,如此好看! 708

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

bzoj4565 [Haoi2016]字符合并 (区间DP + 状压DP)

bzoj4565 [Haoi2016]字符合并 原题地址:http://www.lydsy.com/JudgeOnline/problem.php?id=4565题意: 有一个长度为 n 的 01 串,你可以每次将相邻的 k 个字符合并,得到一个新的字符并获得一定分数。得到的新字符和分数由这 k 个字符确定。 你需要求出你能获得的最大分数。数据范围 1<=n<=300,0<=ci<=1,k<=

Bfk的博客 562

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

[Haoi2016]字符合并---区间+状压dp+分析

为了方便将原题题意中的k改成了m(为什么方便??) 毒瘤有趣理由:因为毒瘤,主要在于分析 Description 有一个长度为 n 的 01 串,你可以每次将相邻的 m 个字符合并,得到一个新的字符并获得一定分数。得到的新字符和分数由这 m 个字符确定。你需要求出你能获得的最大分数。 Input 第一行两个整数n,m。接下来一行长度为n的01串,表示初始串。接下来2^k行,每行一个字符ci和一个整...

dsakhdkas的博客 230

bzoj 4565 [Haoi2016]字符合并 状压dp+区间dp

题面 题目传送门 解法 看到K≤8K≤8K≤8,应该会比较直观地想到状压dp 考虑一段区间,我们一定是把这段区间合并到不能继续合并为止,这样一定是最优的 那么,我们可以设计一下状态:f[i][j][S]f[i][j][S]f[i][j][S]表示将区间[i,j][i,j][i,j]合并成二进制数SSS的最大价值 考虑如何枚举中间的分界点kkk,显然是当且仅当区间[k,j][k,j][k,j]这段...

mysterynoip的博客 258

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时的最大贡献。 由于每次合并会减少K−1K-1K−1个,因此0&amp;lt;k≤K−10&amp;lt;k\le K-10&lt;k≤K−1。 然后转移的时候不用一个一个转移。 两次转移的断点的距离...

苟为蒟蒻又何妨 229

【BZOJ4565】【HAOI2016】字符合并 [状压DP][区间DP]

字符合并 Time Limit: 20 SecMemory Limit: 256 MB[Submit][Status][Discuss] Description   有一个长度为 n 的 01 串,你可以每次将相邻的 k 个字符合并,得到一个新的字符并获得一定分数。   得到的新字符和分数由这 k 个字符确定。你需要求出你能获得的最大分数。 Input   ...

weixin_30364147的博客 75

「BZOJ 4565」「HAOI 2016」字符合并「区间状压DP」

题意 给一个长度为\(n(\leq 300)\)的\(01\)串,每次可以把\(k(\leq 8)\)个相邻字符合并,得到新字符和一定分数,最大化最后的得分 题解 考虑设计dp:\(dp[S][i][j]\)表示区间\([i, j]\)合并为\(S\),最大得分是多少。 这么考虑一定是不遗漏的。如果\([i, j]\)留下来的区间长度\(>k\),那这个合并方案一定会在包含它的大区...

weixin_30487701的博客 132

[HAOI2016]字符合并(ing)

[HAOI2016]字符合并 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 有一个长度为 n 的 01 串,你可以每次将相邻的 k 个字符合并,得到一个新的字符并获得一定分数。得到的新字符和分数由这 k 个字符确定。你需要求出你能获得的最大分数。 输入描述: 第一行两个整数n,k。 接下来一行长度为n的01串,表示初始串。 接下来2k行,每行一个字符ci和一个整数wi,ci 表示长度为k的01

qq_35975367的博客 427

【HAOI2016】BZOJ4565 字符合并题解(区间DP+状压DP)

题目:BZOJ4565. 题目大意:给定一个长度为nnn的01串aia_iai​,每次可以合并相邻mmm个字符,并给出每种情况合并后得到的字符cic_ici​与价值viv_ivi​,求最大价值. 1≤n≤300,1≤m≤8,0≤ai,ci≤1,1≤vi&lt;2311\leq n\leq 300,1\leq m\leq 8,0\leq a_i,c_i\leq 1,1\leq v_i&amp...

hzk_cpp的博客 205
上一篇: LCA 天天爱跑步
下一篇: 矩阵快速幂 [HNOI2011]数学作业
QTY_
博客等级 码龄9年 13粉丝 211原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值