[HAOI2016]字符合并】的更多相关文章

4565: [Haoi2016]字符合并 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 690  Solved: 316[Submit][Status][Discuss] Description 有一个长度为 n 的 01 串,你可以每次将相邻的 k 个字符合并,得到一个新的字符并获得一定分数.得到的新字 符和分数由这 k 个字符确定.你需要求出你能获得的最大分数. Input 第一行两个整数n,k.接下来一行长度为n的01串,表示初始串.接下来…
题意 有一个长度为\(n\)的\(01\)串,你可以每次将相邻的\(k\)个字符合并,得到一个新的字符并获得一定分数.得到的新字符和分数由这\(k\)个字符确定.你需要求出你能获得的最大分数. \(n \leq 300,k \leq 8,1 \leq w_i \leq 10^9\) 分析 参照xyz32768的题解. 区间合并让人想到区间 dp ,而 \(k≤8\) 又让人想到状压 dp . 我们考虑合二为一. \(f[l][r][S]\) 表示将区间 \([l,r]\) 内的字符不断合并,最后…
tijie 时间限制: 2 Sec  内存限制: 256 MB 题目描述 有一个长度为 n 的 01 串,你可以每次将相邻的 k 个字符合并,得到一个新的字符并获得一定分数.得到的新字 符和分数由这 k 个字符确定.你需要求出你能获得的最大分数. 输入 第一行两个整数n,k.接下来一行长度为n的01串,表示初始串.接下来2k行,每行一个字符ci和一个整数wi,ci 表示长度为k的01串连成二进制后按从小到大顺序得到的第i种合并方案得到的新字符,wi表示对应的第i种方案对应 获得的分数.1<=n<…
Description 有一个长度为 n 的 01 串,你可以每次将相邻的 k 个字符合并,得到一个新的字符并获得一定分数.得到的新字 符和分数由这 k 个字符确定.你需要求出你能获得的最大分数. Input 第一行两个整数n,k.接下来一行长度为n的01串,表示初始串.接下来2k行,每行一个字符ci和一个整数wi,ci 表示长度为k的01串连成二进制后按从小到大顺序得到的第i种合并方案得到的新字符,wi表示对应的第i种方案对应 获得的分数.1<=n<=300,0<=ci<=1,w…
题目传送门 Description 有一个长度为 \(n\) 的 \(01\) 串,你可以每次将相邻的 k 个字符合并,得到一个新的字符并获得一定分数. 得到的新字符和分数由这 k 个字符确定.你需要求出你能获得的最大分数. \(n\le 3\times 10^2,k\le 8\) Solution 我们可以观察到的是,为了最优,我们要尽可量要合并的数不相交,因为这样可以合并尽可能多次.于是,也就是说,我们要最后k-1个数展开在原数组互不相交. 于是,我们可以设 \(f_{l,r,S}\) 表示…
设f[i][j][k]为将i~j的字符最终合并成k的答案.转移时只考虑最后一个字符是由哪段后缀合成的.如果最后合成为一个字符特殊转移一下. 复杂度看起来是O(n32k),实际常数极小达到O(玄学). upd:突然发现根本没在bzoj上交.bzoj的数据输入中没有空格. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #i…
传送门 当看到那个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<k≤K−10<k\le K-10<k≤K−1. 然后转移的时候不用一个一个转移. 两次转移的断点的距离需要保证是k−1k-1k−1,因为这样子肯定不必之前距离不为k−1k-1k−1时更优. 注意处理特殊情况(整个区间刚好可以被消…
https://blog.csdn.net/xyz32768/article/details/81591955 首先区间DP和状压DP是比较明显的,设f[L][R][S]为将[L,R]这一段独立操作最终得到的字符序列为S的最大收益.其中S的位数为(R-L)%(k-1)+1. 枚举R第一次参与的操作的左端点mid与这次操作得到的数转移,若当前长度为k则要加上当前操作收益. 注意这个mid和R的距离一定是k-1的倍数,这样总状态和转移就很少,于是可以$O(n^32^8)$通过. #include<c…
考试的时候由于总是搞这道题导致爆零~~~~~(神™倒序难度.....) 考试的时候想着想着想用状压,但是觉得不行又想用区间dp,然而正解是状压着搞区间,这充分说明了一件事,状压不是只是一种dp而是一种用用二进制表示状态的方法,之前打的状压dp只不过是在线性dp的时候用了这种方法. 我们发现对于一个固定长度的区间他最后缩成的位数是一定的(且属于1~k-1),而且最后的每一位的数字的来源相互独立因为他们分别完全展开之后无交.那么我们按照区间dp的一般思路,扩展长度转移状态,我们将转移来源分为两部分,…
Luogu3736 很容易想到直接DP,关键是枚举顺序. \(1.\)设后一段构成最后一个点,前一段构成前面的点,那么能得到\(1\)个点的数量要求 : \(1,k,2k-1...\)相差\(k-1\),所以能够剩下的位数是在模\(K-1\)意义下的 \(2.\)因为实质是从里面转移到外面,注意循环的正逆顺序 : \(mid\)比\(j\)小 , 正序枚举\(j\) ; \(mid\)比\(i\)大 , 倒序枚举\(i\) 具体细节见代码 #include<cstdio> #include&l…
「HAOI2016」字符合并 题意: ​ 有一个长度为\(n\)的\(01\)串,你可以每次将相邻的\(k\)个字符合并,得到一个新的字符并获得一定分数.得到的新字符和分数由这\(k\)个字符确定.你需要求出你能获得的最大分数.(\(n\le 300,k\leq8\)) 题解: ​ 关键是要想到区间dp.记\(f[i][j][s]\),表示区间\([i,j]\),合并后状态为\(s\)的最大值.注意到长度模\(k\)余\(1\)的区间都可合并成一个字符,那么转移枚举的中点每次可以跳动\(k-1\…
字符合并 Time Limit: 20 Sec  Memory Limit: 256 MB[Submit][Status][Discuss] Description 有一个长度为 n 的 01 串,你可以每次将相邻的 k 个字符合并,得到一个新的字符并获得一定分数. 得到的新字符和分数由这 k 个字符确定.你需要求出你能获得的最大分数. Input 第一行两个整数n,k.接下来一行长度为n的01串,表示初始串. 接下来2^k行,每行一个字符ci和一个整数wi, ci表示长度为k的01串连成二进制…
存在file1.txt,其内容如下: H aa 0 0 1 -9 H bb 0 0 2 -9 H cc 0 0 2 -9 存在file2.txt,其内容如下: H aa 0 0 0 -9 asd qwe H bb 0 0 0 -9 fgh rty H cc 0 0 0 -9 jkl uio 现希望根据file1和file2相同的列字符合并文件,要求如下:1.如果两个文件的第二列相同,则将file2的第三列.第四列.第五列.第六列修改为file1对应的第三列.第四列.第五列.第六列内容:2.新文件…
[字符合并多行为一列] 思路1:行转列,在与字符拼接(适用每组列数名相同) 思路2:转xml,去掉多余字符(适用所有) 假设兴趣表Hobbys Name Hobby 小张 打篮球 小张 踢足球 Name Hobby 小张 打篮球,踢足球 [思路1]注意:此方法只是用分组里行数内容固定的情况,如学科:语文,英语,数学. select Name,打篮球+','+踢足球 AllHobby from (select * from Hobbys pivot (Hobby for Hobby in (打篮球…
Written with StackEdit. Description 有一个长度为 \(n\) 的 \(01\) 串,你可以每次将相邻的 \(k\) 个字符合并,得到一个新的字符并获得一定分数.得到的新字符和分数由这\(k\) 个字符确定.你需要求出你能获得的最大分数. Input 第一行两个整数\(n,k\).接下来一行长度为n的01串,表示初始串.接下来\(2^k\)行,每行一个字符\(c_i\)和一个整数\(w_i\),\(c_i\)表示长度为\(k\)的\(01\)串连成二进制后按从小…
字符合并 Description 有一个长度为 n 的 01 串,你可以每次将相邻的 k 个字符合并,得到一个新的字符并获得一定分数.得到的新字符和分数由这 k 个字符确定.你需要求出你能获得的最大分数. Input Format 第一行两个整数n,k.接下来一行长度为n的01串,表示初始串. 接下来2^k行,每行一个字符ci和一个整数wi,ci表示长度为k的01串连成二进制后按从小到大顺序得到的第i种合并方案得到的新字符,wi表示对应的第i种方案对应获得的分数. 1<=n<=300,0<…
原文:在论坛中出现的比较难的sql问题:18(字符合并 整数解析星期几) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路. 整数解析星期几 1 = 星期日 2 = 星期一 4 = 星期二 8 = 星期三 16 = 星期四 32 = 星期五 64 = 星期六, 化为二进制 0000001=星期日  0000010=星期一  0000100=星期二  000…
题意 给一个长度为\(n(\leq 300)\)的\(01\)串,每次可以把\(k(\leq 8)\)个相邻字符合并,得到新字符和一定分数,最大化最后的得分 题解 考虑设计dp:\(dp[S][i][j]\)表示区间\([i, j]\)合并为\(S\),最大得分是多少. 这么考虑一定是不遗漏的.如果\([i, j]\)留下来的区间长度\(>k\),那这个合并方案一定会在包含它的大区间计算到,所以我们只考虑能合并都合并完的情况 枚举缩完最后一个位是啥,这对应\([i, j]\)的一个长度\(\bm…
按照指定字符进行合并或拆分是经常碰到的场景,MySQL在合并的写法上比较简单,但是按指定字符拆分相对比较麻烦一点(也就是要多写一些字符).本文将举例演示如何进行按照指定字符合并及拆分. 1. 合并 MySQL数据库中按照指定字符合并可以直接用group_concat来实现. 创建测试表 mysql> create table tb_group(id int auto_increment primary key ,col1 varchar(20)); Query OK, 0 rows affect…
题解 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)的倍数 这样的话最后跑得还是很快的 代码 #includ…