Atcoder CODE FESTIVAL 2017 qual C D
来源:互联网 发布:sdrsharp linux 编辑:程序博客网 时间:2024/06/04 12:52
传送门
D - Yet Another Palindrome Partitioning
题意:给你一个字符串,问最少可以划分成多少段使每一段各自都可以通过一些移动变成回文串。
思路:dp[i]表示到当前的位置最少需要划分的次数,num[i]表示当前为i时最少的dp[i].
用每一个二进制位代表每一个字符,经典的状压dp题。
#include <bits/stdc++.h>using namespace std;const int MAXN = 200005;char str[MAXN];int num[1<<26];int dp[MAXN];int sum;int main(){ scanf("%s", str); memset(num, 0x3f, sizeof(num)); memset(dp, 0x3f, sizeof(dp)); num[0]=0; sum=0; int len=strlen(str); for(int i=0;i<len;++i) { int x=1<<(str[i]-'a'); sum^=x; dp[i]=min(dp[i], num[sum]+1); for(int j=0;j<26;++j) dp[i]=min(dp[i], num[sum^(1<<j)]+1); num[sum]=min(num[sum], dp[i]); } printf("%d\n", dp[len-1]); return 0;}
这个hash拉链法值得学习一波。
#include<cstring>#include<cstdlib>#include<cstdio>#include<assert.h>#include<math.h>#include<algorithm>//#include<iostream>using namespace std;int n;#define maxn 1000007struct Hash{ int first[maxn],Next[maxn],list[maxn],Min[maxn],len; Hash() {memset(first,0,sizeof(first));len=0;} int hash(int x) {return x%maxn;} void insert(int x,int val) { int v=hash(x); for (int i=first[v];i;i=Next[i]) if (list[i]==x) {Min[i]=min(Min[i],val);return;} len++; list[len]=x; Min[len]=val; Next[len]=first[v]; first[v]=len; } int get(int x) { int v=hash(x); for (int i=first[v];i;i=Next[i]) if (list[i]==x) return Min[i]; return 0x3f3f3f3f; }}h;char s[maxn];int f[maxn];int main(){ scanf("%s",s+1);n=strlen(s+1); h.insert(0,0);int now=0; for (int i=1;i<=n;i++) { now^=1<<(s[i]-'a');f[i]=h.get(now)+1; for (int j=0;j<26;j++) f[i]=min(f[i],1+h.get(now^(1<<j))); h.insert(now,f[i]); } printf("%d\n",f[n]); return 0;}
阅读全文
0 0
- Atcoder CODE FESTIVAL 2017 qual C D
- [Atcoder CODE FESTIVAL 2017 qual C]D
- 【AtCoder CODE FESTIVAL 2017 qual C】D
- Atcoder Code Festival 2016 Qual A D
- Atcoder CODE FESTIVAL 2017 qual C 总结+ABCD题解
- CODE FESTIVAL 2017 qual C
- 【二分图染色】AtCoder CODE FESTIVAL 2017(qual B)C[3 Steps]题解
- CODE FESTIVAL 2017 qual C C
- CODE FESTIVAL 2017 qual A C
- CODE FESTIVAL 2017 qual B:C
- CODE FESTIVAL 2017 qual B
- CODE FESTIVAL 2017 qual B
- CODE FESTIVAL 2017 qual A
- CODE FESTIVAL 2017 qual C- A-B-C 总结
- atcoder CODE FESTIVAL 2017 qual A 手速(雾)赛
- AtCoder Code festival 2017qualC-D-dp+优化
- [DP]Atcoder CODE FESTIVAL 2017 Final (Parallel) D
- AGC CODE FESTIVAL 2017 qual A(部分题解)
- RecyclerView中单个item里面的子视图的点击监听
- 欢迎使用CSDN-markdown编辑器
- zab协议流程图总结
- 切换效果
- annaconda python 和Ubuntu根目录中Python并存下cannot import _caffe,不能make pycaffe的解决办法。
- Atcoder CODE FESTIVAL 2017 qual C D
- 数据库表快速更新
- Java String为什么是不可变类,StringBuffer与StringBuilder区别
- 【JZOJ 5411】【NOIP2017提高A组集训10.22】友谊
- DEVONthink Pro Office 2.9.16 for Mac 简体 中文版 自适应简/繁中文系统
- 洛谷P3905 道路重建
- 数据结构-栈&队列&Deque实现比较
- vbox里面Ubuntu虚拟机与主机Windows之间设置共享文件夹
- 用户登录操作