POJ 1795 DNA Laboratory(状压DP)
【题目链接】 http://poj.org/problem?id=1795
【题目大意】
给出n个字符串,求一个最小长度的串,该串包含给出的所有字符串。
要求长度最小且字典序最小。
【题解】
dp[i][s]表示包括s集合字符串的第i个字符串为开头的最小值
从后往前贪心得到最小值,然后从前往后搜索得出最小字典序的答案
【代码】
#include <iostream>
#include <cstring>
#include <algorithm>
#include <string>
using namespace std;
const int N=17,INF=0x3f3f3f3f;
string str[N],ans;
int T,Cas=0,n,dp[N][1<<N],cost[N][N];
void init(){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i!=j&&str[i].find(str[j])!=string::npos)str[j]=str[i];
}
}sort(str,str+n);
n=unique(str,str+n)-str;
memset(cost,0,sizeof(cost));
for(int i=0;i<n;i++){
for(int j=0;j<n;j++)if(i!=j){
int len=min(str[i].length(),str[j].length());
for(int k=0;k<=len;k++){
if(str[i].substr(str[i].length()-k)==str[j].substr(0,k)){
cost[i][j]=str[i].length()-k;
}
}
}
}
}
void dfs(int id,int s){
if(s==0)return;
string tmp; int nxt=-1;
for(int i=0;i<n;i++)if(i!=id&&(s>>i&1)){
if(dp[id][s]==dp[i][s&~(1<<id)]+cost[id][i]){
string t=str[i].substr(str[id].length()-cost[id][i],str[i].length());
if(nxt==-1||t<tmp){tmp=t;nxt=i;}
}
}ans+=tmp;
dfs(nxt,s&~(1<<id));
}
int main(){
cin>>T;
while(T--){
cin>>n;
for(int i=0;i<n;i++)cin>>str[i];
if(n>1){
init();
for(int i=0;i<=n;i++)fill(dp[i],dp[i]+(1<<n),INF);
for(int i=0;i<n;i++)dp[i][1<<i]=str[i].length();
for(int s=0;s<1<<n;s++){
for(int j=0;j<n;j++)if(dp[j][s]!=INF&&(s>>j&1)){
for(int i=0;i<n;i++)if(!(s>>i&1)){
dp[i][s|1<<i]=min(dp[i][s|1<<i],dp[j][s]+cost[i][j]);
}
}
}int id=0;
for(int i=1;i<n;i++){
if(dp[i][(1<<n)-1]<dp[id][(1<<n)-1])id=i;
}ans=str[id];
dfs(id,(1<<n)-1);
}else ans=str[0];
cout<<"Scenario #"<<++Cas<<":"<< endl;
cout<<ans<<endl<<endl;
}return 0;
}
POJ 1795 DNA Laboratory(状压DP)的更多相关文章
- POJ 1795 DNA Laboratory (贪心+状压DP)
题意:给定 n 个 字符串,让你构造出一个最短,字典序最小的字符串,包括这 n 个字符串. 析:首先使用状压DP,是很容易看出来的,dp[s][i] 表示已经满足 s 集合的字符串以 第 i 个字符串 ...
- poj 1795 DNA Laboratory
DNA Laboratory Time Limit: 5000MS Memory Limit: 30000K Total Submissions: 2892 Accepted: 516 Des ...
- POJ 3254 Corn Fields (状压dp)
题目链接:http://poj.org/problem?id=3254 给你n*m的菜地,其中1是可以种菜的,而菜与菜之间不能相邻.问有多少种情况. 状压dp入门题,将可以种菜的状态用一个数的二进制表 ...
- POJ 3254 - Corn Fields - [状压DP水题]
题目链接:http://poj.org/problem?id=3254 Time Limit: 2000MS Memory Limit: 65536K Description Farmer John ...
- [ An Ac a Day ^_^ ] POJ 3254 Corn Fields 状压dp
题意: 有一块n*m的土地 0代表不肥沃不可以放牛 1代表肥沃可以放牛 且相邻的草地不能同时放牛 问最多有多少种放牛的方法并对1e8取模 思路: 典型的状压dp 能状态压缩 能状态转移 能状态压缩的题 ...
- poj 3254Corn Fields (入门状压dp)
Farmer John has purchased a lush ≤ M ≤ ; ≤ N ≤ ) square parcels. He wants to grow some yummy corn fo ...
- POJ 1684 Corn Fields(状压dp)
描述 Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ≤ ...
- POJ 2923 Relocation(状压DP)题解
题意:有2辆车运货,每次同时出发,n(<10),各自装货容量c1 c2,问最少运几次运完. 思路:n比较小,打表打出所有能运的组合方式,用背包求出是否能一次运走.然后状压DP运的顺序. 代码: ...
- POJ 1185炮兵阵地 (状压DP)
题目链接 POJ 1185 今天艾教留了一大堆线段树,表示做不动了,就补补前面的题.QAQ 这个题,我第一次写还是像前面HDU 2167那样写,发现这次影响第 i 行的还用i-2行那样,那以前的方法就 ...
随机推荐
- day06_05 字典
1.0 字典 1.1 补充知识:用id可以查找出变量的内存地址 a = 10 print(id(a)) #找出内存地址 #>>>506528496 b = 15 print(id(b ...
- 删除maven仓库中的lastUpdate文件
使用idea时导入hibernate 5.1.0的jar包,然后发现本地仓库中找不到该版本的jar 然后手贱 alt+enter 发现提示 update maven indices 然后以为更新就会好 ...
- Github - Unity3d-Timers
https://github.com/pointcache/Unity3d-Timers Unity3d-Timers Timer class with various behaviors About ...
- ocrosoft Contest1316 - 信奥编程之路~~~~~第三关 问题 K: 大整数加法
http://acm.ocrosoft.com/problem.php?cid=1316&pid=10 题目描述 求两个不超过200位的非负整数的和. 输入 有两行,每行是一个不超过200 ...
- update-database -script
update-database -script 更新脚本生成失败? 项目选择的不对 update后面-database空格-script
- 【bzoj4001】[TJOI2015]概率论 生成函数+导数
题目描述 输入 输入一个正整数N,代表有根树的结点数 输出 输出这棵树期望的叶子节点数.要求误差小于1e-9 样例输入 1 样例输出 1.000000000 题解 生成函数+导数 先考虑节点个数为$n ...
- Linux命令 -磁盘和文件系统类
声明:本文所涉及到的Linux命令均为最常见的用法,未列举之参数,自行查阅man 1.df 磁盘容量 -h 以人类易读方式展示(GB.KB)等 df -h /usr 2.du 文件或目录的容量 -s ...
- [Codeforces 1027 F] Session in BSU [并查集维护二分图匹配问题]
题面 传送门 思路 真是一道神奇的题目呢 题目本身可以转化为二分图匹配问题,要求右半部分选择的点的最大编号最小的一组完美匹配 注意到这里左边半部分有一个性质:每个点恰好连出两条边到右半部分 那么我们可 ...
- Tomcat学习笔记(十三)
服务器组件和服务组件 服务器组件 org.apache.catalina.Server接口的实例表示Catalina的整个servlet引擎,包含了所有的组件.使用一种优雅的方法来启动/关闭整个系统, ...
- 切换cmd的目录
http://jingyan.baidu.com/article/af9f5a2d20253343140a450f.html