题目大意:

把一个字符串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)相关推荐

  1. 武理校赛A题 ljw的剥削(思维 + map应用)

    武理校赛A题 ljw的剥削(思维 + map应用) 牛客链接 题意: 给定 a[],b[] 两个长度同为 n 的数组,经过一系列操作后, 使 p = ∑ i = 1 n m a x ( ( a i − ...

  2. wordpress-主题商业中国总裁商业思维 培训商学院官网源码整站下载 培训商学院,教育培训官网 培训商学院整站资源

    wordpress-主题商业中国总裁商业思维 培训商学院官网源码整站下载 培训商学院,教育培训官网 培训商学院整站资源 wordpress-主题商业中国总裁商业思维

  3. 蓝桥杯备考-刷题之路-动态规划算法(DP算法)Part1

    之前在刷力扣的时候就是浑浑噩噩的,照着评论区的答案写了一遍就万事大吉了,没有深度思考过.这次备考蓝桥杯看到DP算法的第一道题就不会,更难受的是看答案了依然完全不理解,所以决心把DP算法一次弄懂. 开始 ...

  4. [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 ...

  5. AtCoder Beginner Contest 297——A-E题讲解

    蒟蒻来讲题,还望大家喜.若哪有问题,大家尽可提! Hello, 大家好哇!本初中生蒟蒻讲解一下AtCoder Beginner Contest 297这场比赛的A-E题! 今晚比前面几场要简单点,但我 ...

  6. AtCoder Beginner Contest 244 B题(超详讲解)

    目录 题目 状态 代码及讲解 结语 题目 Time Limit: 2 sec / Memory Limit: 1024 MB Score : 200 points Problem Statement ...

  7. [NOIP模拟测试9]题(Problem) 题解 (组合数全家桶+dp)

    达哥送分给我我都不要,感觉自己挺牛批. $type=0:$ 跟visit那题类似,枚举横向移动的步数直接推公式: $ans=\sum C_n^i \times C_i^{\frac{i}{2}} \t ...

  8. CCPC-Wannafly Winter Camp Day8 (Div2, onsite) A 题 Aqours (精巧的树形DP)

    题目链接: https://www.cometoj.com/contest/29/problem/A?problem_id=414 Aqours 题目描述 Aqours 正在 LoveLive! 决赛 ...

  9. Ticket Game CodeForces - 1215D(博弈题,巴什博弈思维)

    题意:两个人玩游戏,通过轮流填数字(0~9),若最终左右两边的和相等,后手赢,否则先手赢.起始有部分数字和空格. 官方题解: 题解翻译: 让我们把余额表示为左半部分数字和右半部分数字和的差.也让我成为 ...

最新文章

  1. Unity5x编辑器的主菜单和布局
  2. BZOJ3110: [Zjoi2013]K大数查询
  3. 【CentOS 7】 yum源安装mysql5.6
  4. bilibili基于 Flink 的机器学习工作流平台在 b 站的应用
  5. 解决ng界面长表达式(ui-set)
  6. python华容道最短路径_NOIp2013D2T3 华容道【搜索图论-最短路】
  7. asp.net绑定checkboxlist--------jquery绑定click事件,获取checkbox的value和显示值
  8. 嵌入式操作系统内核原理和开发(通用优先级调度)
  9. python中类的使用_Python第九课-使用 类(class)创造新的数据类型!
  10. Mysql 的 Explain性能分析
  11. 关于Shell 脚本的export语句
  12. Response.ContentType 控制输出文件类型(讨论下载文件问题)
  13. linux下载tar包和rpm包以及镜像的地址分享一下
  14. 计算机word表格计算教程F9,word表格计算方法详解
  15. 大数据可视化技术:可视化技术概述与Echarts入门
  16. pydev debugger: warning: trying to add breakpoint to file that does not exist
  17. python网上下载视频,音乐
  18. 通过InputStreamResource下载上传图片
  19. 【Paper】A Comparative Evaluation of Unsupervised Anomaly Detection Algorithms for Multivariate Data
  20. 一面面经(一)(个人记录)

热门文章

  1. 根据文件前四个字节判断文件类型(centos 7)
  2. IntelliJ IDEA 导入新项目以后的简单配置
  3. struts2的action中获得request response session 对象
  4. 【体系结构】LGWR进程触发机制的理解
  5. 在线常用crontab表达式大全验证解析
  6. Hadoop 系列 HDFS:分布式文件系统(HDFS文件读写)
  7. 当稳定币遇上BCH,将会擦出什么样的火花?
  8. html5 history解决ajax不能加入历史记录的问题
  9. 《Servlet和JSP学习指南》一2.5 小结
  10. FastDFS之文件服务器集群部署详解