POJ 1903 - Jurassic Remains 中途相遇法(枚举)
来源:互联网 发布:淘宝李白凤求凰可信吗 编辑:程序博客网 时间:2024/04/29 22:07
神奇的枚举题~~~超级好的思路!
题意重现...从n(n<=24)个字符串中选取最多的串使得他们中每个字母出现的次数都是偶数次....
由此可见..个数都是浮云..奇偶才是本质...对于每个字母..有偶数个..为0..有奇数个为1..那么26个英文字母的情况总数为2^26..
题意抽象..从n(n<=24)个二进制数中(位<=26)选取最多的个数...使它们异或后为0...
如果暴力枚举...2^24=10^7...加些剪枝应该能过..毕竟给了10s....
此题的超级优化....把24个串分成前后两半...前面的做暴力枚举..并把结果丢到集合里去...2^12....后面的也暴力枚举..并且每次的结果去集合里看有无出现过相同的..如果有那么异或后为0..就是符合题目要求的..找到个数最多的!...这样一优化...前后两个2^12+2^12..瞬间时间复杂度开方了!给跪....
Program:
#include<iostream>#include<stdio.h>#include<string.h>#include<cmath>#include<map>#include<algorithm>#define ll long longusing namespace std; struct node{ int w[25],num;}ans; char s[25][105]; int n;map<int,node> mymap;void dfs1(int i,int x,node h){ int l,j; if (mymap.find(x)==mymap.end()) mymap[x]=h; if (mymap[x].num<h.num) mymap[x]=h; if (i>n/2) return; dfs1(i+1,x,h); l=strlen(s[i]); for (j=0;j<l;j++) x^=1<<(int)(s[i][j]-'A'); h.w[++h.num]=i; dfs1(i+1,x,h); return;}void dfs2(int i,int x,node h){ int l,j; if (mymap.find(x)!=mymap.end() && mymap[x].num+h.num>ans.num) { ans=mymap[x]; for (j=1;j<=h.num;j++) ans.w[++ans.num]=h.w[j]; } if (i>n) return; dfs2(i+1,x,h); l=strlen(s[i]); for (j=0;j<l;j++) x^=1<<(int)(s[i][j]-'A'); h.w[++h.num]=i; dfs2(i+1,x,h); return;}int main(){ int i; node h; scanf("%d",&n); for (i=1;i<=n;i++) scanf("%s",s[i]); h.num=0; mymap.clear(); dfs1(1,0,h); ans.num=0; dfs2(n/2+1,0,h); printf("%d\n",ans.num); for (i=1;i<=ans.num;i++) printf("%d ",ans.w[i]); return 0;}
- POJ 1903 - Jurassic Remains 中途相遇法(枚举)
- POJ 1903 Jurassic Remains -- 中途相遇法
- poj 1903 Jurassic Remains 中途相遇法
- Jurassic Remains,NEERC 2003,中途相遇法
- uva 1326 Jurassic Remains(中途相遇法)
- Uva 1326 - Jurassic Remains 中途相遇法
- LA 2965 - Jurassic Remains 中途相遇法
- LA 2965 Jurassic Remains / 中途相遇法
- uva1326 - Jurassic Remains 中途相遇法
- 【UVALive】2965 Jurassic Remains 中途相遇法
- UVA 1326 Jurassic Remains 中途相遇法
- LA 2965 Jurassic Remains 中途相遇法 .
- UVALive - 2965 Jurassic Remains 状态压缩+中途相遇法
- UVALive 2965-Jurassic Remains (Mitm)中途相遇法+bitmask
- uva 1326 Jurassic Remains(中途相遇法+位运算)
- 【中途相遇+二进制】【NEERC 2003】Jurassic Remains
- LA --- 2965 Jurassic Remains 数相同的大写字母 【思维 + 状态压缩枚举 + 中途相遇法(折半搜索)】
- POJ-1903-Jurassic Remains
- wix 安装包调试(zz.IS2120@BG57IV3.csdn)
- benford定律
- 后可视化编程时代
- 后可视化编程
- 旧工程适配iOS6和iPhone5的一些故事
- POJ 1903 - Jurassic Remains 中途相遇法(枚举)
- 2011级-csdn-java-张侃—Spring(2)
- BlazeDS
- C#迭代器,枚举器
- ComboBox控件 详解1
- 查看图片前进后退效果图
- hdu 1025 Constructing Roads In JGShining's Kingdom
- Hibernate插入、查询、删除操作
- 在线进销存管理系统源码 客户关系管理系统源码 人事薪资管理系统源码(PHP+MySQL)