Atcoder CODE FESTIVAL 2017 qual C D - Yet Another Palindrome Partitioning
2017-10-22 22:34
501 查看
传送门
D - Yet Another Palindrome Partitioning
题意:给你一个字符串,问最少可以划分成多少段使每一段各自都可以通过一些移动变成回文串。
思路:dp[i]表示到当前的位置最少需要划分的次数,num[i]表示当前为i时最少的dp[i].
用每一个二进制位代表每一个字符,经典的状压dp题。
这个hash拉链法值得学习一波。
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 1000007 struct 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 ); return 0; }
相关文章推荐
- [Atcoder CODE FESTIVAL 2017 qual C]D - Yet Another Palindrome Partitioning 状压DP
- 【AtCoder CODE FESTIVAL 2017 qual C】D - Yet Another Palindrome Partitioning (状压dp 字符串)
- 【Atcoder】CODE FESTIVAL 2017 qual C D - Yet Another Palindrome Partitioning
- atcoder Yet Another Palindrome Partitioning(dp)
- 【二分图染色】AtCoder CODE FESTIVAL 2017(qual B)C[3 Steps]题解
- 【题解】Popping Balls AtCoder Code Festival 2017 qual B E 组合计数
- atcoder/CODE FESTIVAL 2017 qual B/B(dfs染色判断是否为二分图)
- atcoder CODE FESTIVAL 2017 qual A 手速(雾)赛
- Atcoder CODE FESTIVAL 2017 Final 简要题解
- [DP]Atcoder CODE FESTIVAL 2017 Final (Parallel) D - Zabuton
- Atcoder CODE FESTIVAL 2017 qual C 总结+ABCD题解
- Atcoder Code Festival 2016 Qual A D - マス目と整数 / Grid and Integers
- CODE FESTIVAL 2017 qual B:C - 3 Steps 并查集判二分图、二分图性质
- 【Atcoder】CODE FESTIVAL 2017 qual A D - Four Coloring
- Atcoder Codefestival Exhibition/Team Relay/Tournament Round 简要题解
- 找规律 B - Palindrome-phobia(CODE FESTIVAL 2017 Final)
- Atcoder CODE FESTIVAL 2016 qual C 的E题 Encyclopedia of Permutations
- B - Palindrome-phobia(CODE FESTIVAL 2017 Final)
- AtCoder Code festival 2017qualC-D-dp+优化
- CODE FESTIVAL 2017 qual A C