atcoder 2017Code festival C ——D题 Yet Another Palindrome Partitioning(思维+dp)
题目大意:
把一个字符串s分割成m个串,这m个串满足至多有一种字符出现次数为奇数次,其他均为偶数次,问m的最小值
题解:
首先我们想一下纯暴力怎么做
显然是可以n^2暴力的,然后dp[i]表示分割到i的所用最少的串个数
接下来就是枚举所有可行的j,使得dp[j]转移到dp[i]。
虽然可以暴力找,但是如果使用暴力找,则后续就无法优化了,这里就用到了异或的思想
用一个26位的int数组a[i]表示从1到i的状态,第j位为1代表这个字母出现了奇数次,反之为偶数次。
那么区间[l, r]是否可行,就是a[l]^a[r]的值必须为2的幂次。
有了这个性质,转移依然是n^2的,但是我们可以优化它。
dp[i][x]表示1~i中当前状态为x,分割到i所用最少的串个数。
那么考虑如何更新i+1,首先i+1的状态是固定的,就是a[i]。
所以能更新的就是所有使得y^a[i]是2的幂次的y,dp[i][a[i]] = min(dp[i][a[i]], dp[i-1][y])。
注意异或是可交换,那么只需要枚举2的幂次,然后和a[i]异或,就可以得到y了
于是就这么神奇的做完了!
复杂度O(26*n)
题解很麻烦,但是代码量是很少的。
#include <iostream> #include <cstdio> #include <cstring> using namespace std; const int maxn = 2e5 + 100; char str[maxn]; int a[maxn]; int dp[(1<<26)]; int main() {cin>>str;int L = strlen(str), ans = 0;for(int i = 0; i < L; i++){ans ^= (1<<(str[i] - 'a'));a[i] = ans;}memset(dp, 1, sizeof(dp));for(int i = 0; i < L; i++){int ok = 0;for(int j = 0; j < 26; j++) if(a[i] == 0 || (a[i]^(1<<j)) == 0) { dp[a[i]] = 1; ok = 1; break; }if(ok) continue;for(int j = 0; j < 26; j++)dp[a[i]] = min(dp[a[i]^(1<<j)]+1, dp[a[i]]);}cout<<dp[a[L-1]]<<endl;return 0; }
转载于:https://www.cnblogs.com/Saurus/p/7724509.html
atcoder 2017Code festival C ——D题 Yet Another Palindrome Partitioning(思维+dp)相关推荐
- 武理校赛A题 ljw的剥削(思维 + map应用)
武理校赛A题 ljw的剥削(思维 + map应用) 牛客链接 题意: 给定 a[],b[] 两个长度同为 n 的数组,经过一系列操作后, 使 p = ∑ i = 1 n m a x ( ( a i − ...
- wordpress-主题商业中国总裁商业思维 培训商学院官网源码整站下载 培训商学院,教育培训官网 培训商学院整站资源
wordpress-主题商业中国总裁商业思维 培训商学院官网源码整站下载 培训商学院,教育培训官网 培训商学院整站资源 wordpress-主题商业中国总裁商业思维
- 蓝桥杯备考-刷题之路-动态规划算法(DP算法)Part1
之前在刷力扣的时候就是浑浑噩噩的,照着评论区的答案写了一遍就万事大吉了,没有深度思考过.这次备考蓝桥杯看到DP算法的第一道题就不会,更难受的是看答案了依然完全不理解,所以决心把DP算法一次弄懂. 开始 ...
- [Atcoder Code Festival 2017 Qual A Problem F] Squeezing Slimes
原题链接:https://code-festival-2017-quala.contest.atcoder.jp/tasks/code_festival_2017_quala_f Squeezing ...
- AtCoder Beginner Contest 297——A-E题讲解
蒟蒻来讲题,还望大家喜.若哪有问题,大家尽可提! Hello, 大家好哇!本初中生蒟蒻讲解一下AtCoder Beginner Contest 297这场比赛的A-E题! 今晚比前面几场要简单点,但我 ...
- AtCoder Beginner Contest 244 B题(超详讲解)
目录 题目 状态 代码及讲解 结语 题目 Time Limit: 2 sec / Memory Limit: 1024 MB Score : 200 points Problem Statement ...
- [NOIP模拟测试9]题(Problem) 题解 (组合数全家桶+dp)
达哥送分给我我都不要,感觉自己挺牛批. $type=0:$ 跟visit那题类似,枚举横向移动的步数直接推公式: $ans=\sum C_n^i \times C_i^{\frac{i}{2}} \t ...
- CCPC-Wannafly Winter Camp Day8 (Div2, onsite) A 题 Aqours (精巧的树形DP)
题目链接: https://www.cometoj.com/contest/29/problem/A?problem_id=414 Aqours 题目描述 Aqours 正在 LoveLive! 决赛 ...
- Ticket Game CodeForces - 1215D(博弈题,巴什博弈思维)
题意:两个人玩游戏,通过轮流填数字(0~9),若最终左右两边的和相等,后手赢,否则先手赢.起始有部分数字和空格. 官方题解: 题解翻译: 让我们把余额表示为左半部分数字和右半部分数字和的差.也让我成为 ...
最新文章
- Unity5x编辑器的主菜单和布局
- BZOJ3110: [Zjoi2013]K大数查询
- 【CentOS 7】 yum源安装mysql5.6
- bilibili基于 Flink 的机器学习工作流平台在 b 站的应用
- 解决ng界面长表达式(ui-set)
- python华容道最短路径_NOIp2013D2T3 华容道【搜索图论-最短路】
- asp.net绑定checkboxlist--------jquery绑定click事件,获取checkbox的value和显示值
- 嵌入式操作系统内核原理和开发(通用优先级调度)
- python中类的使用_Python第九课-使用 类(class)创造新的数据类型!
- Mysql 的 Explain性能分析
- 关于Shell 脚本的export语句
- Response.ContentType 控制输出文件类型(讨论下载文件问题)
- linux下载tar包和rpm包以及镜像的地址分享一下
- 计算机word表格计算教程F9,word表格计算方法详解
- 大数据可视化技术:可视化技术概述与Echarts入门
- pydev debugger: warning: trying to add breakpoint to file that does not exist
- python网上下载视频,音乐
- 通过InputStreamResource下载上传图片
- 【Paper】A Comparative Evaluation of Unsupervised Anomaly Detection Algorithms for Multivariate Data
- 一面面经(一)(个人记录)