poj2817状态压缩 升维
/*
两两求出字符串之间最大可以匹配的值
由已知状态推导出位置状态
状态s表示已经加入到集合中的字符串,0表示串i不存在,1存在
由于字符串的加入顺序会影响结果,所以增加一维来表示
dp[S][i]表示状态集合为S,且i是新加入S的字符串的最大值
*/
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
char a[][];
int dp[<<][],w[][],n;
void get(int x,int y)
{
w[x][y]=w[y][x]=;
int l1=strlen(a[x]),l2=strlen(a[y]),s=;
for(int i=; i<l1; i++)
for(int j=; j<l2; j++)
{
int k=;
s=;
while(i+k<l1&&j+k<l2)
{
if(a[x][i+k]==a[y][j+k])
s++;
k++;
}
if(s>w[x][y])w[x][y]=w[y][x]=s;
}
}
int main(){
while(cin>>n,n){
for(int i=;i<=n;i++)
cin>>a[i];
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++)
get(i,j);//得到i和j配对的最大值 memset(dp,,sizeof dp);
for(int i=;i<(<<n);i++)
for(int j=;j<=n;j++){//枚举状态中存在的字符串作为旧状态中最后放进去的字符串
if( !(i&(<<(j-))) )continue;
for(int k=;k<=n;k++)//枚举每个不在状态中的字符串作为新状态中最后放进去的字符串
if(!(i&(<<(k-))))
dp[i|(<<(k-))][k]=max(dp[i|(<<(k-))][k],dp[i][j]+w[j][k]);
}
int ans=;
for(int i=;i<=n;i++)
ans=max(ans,dp[(<<n)-][i]);
printf("%d\n",ans);
}
}
poj2817状态压缩 升维的更多相关文章
- vijos1426兴奋剂检查(多维费用的背包问题+状态压缩+hash)
		
背景 北京奥运会开幕了,这是中国人的骄傲和自豪,中国健儿在运动场上已经创造了一个又一个辉煌,super pig也不例外……………… 描述 虽然兴奋剂是奥运会及其他重要比赛的禁药,是禁止服用的.但是运动 ...
 - 状态压缩dp小结
		
最近一段时间算是学了一些状态压缩的题目,在这里做个小结吧 首先是炮兵布阵类题目,这类题目一开始给定一个矩形,要求在上面放置炮兵,如果在一格放了炮兵那么周围的某些格子就不能放炮兵,求最大能放置炮兵的数量 ...
 - POJ 3254. Corn Fields 状态压缩DP (入门级)
		
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9806 Accepted: 5185 Descr ...
 - ACM:  HDU 5418 Victor and World - Floyd算法+dp状态压缩
		
HDU 5418 Victor and World Time Limit:2000MS Memory Limit:131072KB 64bit IO Format:%I64d & ...
 - [ACM_动态规划] 轮廓线动态规划——铺放骨牌(状态压缩1)
		
Description Squares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One night, af ...
 - DP大作战—状态压缩dp
		
题目描述 阿姆斯特朗回旋加速式阿姆斯特朗炮是一种非常厉害的武器,这种武器可以毁灭自身同行同列两个单位范围内的所有其他单位(其实就是十字型),听起来比红警里面的法国巨炮可是厉害多了.现在,零崎要在地图上 ...
 - 最大联通子数组之和(dfs,记忆化搜索,状态压缩)
		
最大联通子数组,这次的题目,我采用的方法为dfs搜索,按照已经取到的数v[][],来进行搜索过程的状态转移,每次对v[][]中标记为1的所有元素依次取其相邻的未被标记为1的元素,将其标记为1,然而,这 ...
 - HDU 2809 God of War(DP + 状态压缩)
		
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2809 题目大意:给出战神吕布的初始攻击力ATI.防御力DEF.生命值HP.每升一级增加的攻击力In_A ...
 - 状态压缩动态规划  状压DP
		
总述 状态压缩动态规划,就是我们俗称的状压DP,是利用计算机二进制的性质来描述状态的一种DP方式 很多棋盘问题都运用到了状压,同时,状压也很经常和BFS及DP连用,例题里会给出介绍 有了状态,DP就比 ...
 
随机推荐
- Web三层-UI/BLL/DAL/MODEL
			
2013传智播客视频\视频\2013-05-28-EF\视频 创建4个程序集,添加引用,model添加映射, P01UI表现层--BLL+MODELP02BLL业务层--DAL+MODELP03DAL ...
 - iTOP-4418开发板Ubuntu系统烧写方法分享
			
开发平台:迅为iTOP-4418开发板 系统:Ubuntu 1. TF卡读写速度测试 烧写 Ubuntu 对于 TF 卡的要求比较高,很多老旧的卡都无法烧写 Ubuntu,下面提供一种 相对 ...
 - MySql cmd下的学习笔记 —— 有关建立数据库的操作(连接Mysql,建立数据库,删除数据库等等)
			
(01) 连接数据库 mysql -uroot -p 之后输入密码 ******.(由于我的密码设置的是111,所以输入的是111) (02) 退出数据库 exit (03) 查看数据库 show d ...
 - Navicat for MySQL 12中文版 破解流程
			
1.下载 Keygen_Patch 软件 下载地址 pass: saxz 2.启动 Keygen_Patch 软件 3.提示破解成功了,先别着急 4.运行 Navica 软件,输入注册码 5.断网 ...
 - SpringSecurityOAuth认证配置及Token的存储
			
⒈pom依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...
 - MySQL报错总结
			
错误一: MySQL从cmd使用命令“mysql -u root -p”启动报错,显示“不能连接到端口xxx”(实际端口为3306),这里的问题实际是由于我没有设置mysql开机自启动,所以解决方案就 ...
 - ARM的Jazelle技术【转】
			
转自:https://blog.csdn.net/ken_yjj/article/details/6797290 Come From: http://www.arm.com/zh/products/p ...
 - 设计模式C++学习笔记之十五(Composite组合模式)
			
15.1.解释 概念:将对象组合成树形结构以表示“部分-整体”的层次结构.Composite使得用户对单个对象和组合的使用具有一致性. main(),客户 CCorpNode,抽象基类,实现基本信 ...
 - 设计模式C++学习笔记之十二(Command命令模式)
			
命令模式,将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤消的操作.应该是一个比较简单的模式了. 12.1.解释 main(),客户 CIn ...
 - boost 实现http断点续传
			
// testc.cpp : Defines the entry point for the console application. // #include "stdafx.h" ...