/*
两两求出字符串之间最大可以匹配的值
由已知状态推导出位置状态
状态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状态压缩 升维的更多相关文章

  1. vijos1426兴奋剂检查(多维费用的背包问题+状态压缩+hash)

    背景 北京奥运会开幕了,这是中国人的骄傲和自豪,中国健儿在运动场上已经创造了一个又一个辉煌,super pig也不例外……………… 描述 虽然兴奋剂是奥运会及其他重要比赛的禁药,是禁止服用的.但是运动 ...

  2. 状态压缩dp小结

    最近一段时间算是学了一些状态压缩的题目,在这里做个小结吧 首先是炮兵布阵类题目,这类题目一开始给定一个矩形,要求在上面放置炮兵,如果在一格放了炮兵那么周围的某些格子就不能放炮兵,求最大能放置炮兵的数量 ...

  3. POJ 3254. Corn Fields 状态压缩DP (入门级)

    Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9806   Accepted: 5185 Descr ...

  4. ACM: HDU 5418 Victor and World - Floyd算法+dp状态压缩

    HDU 5418 Victor and World Time Limit:2000MS     Memory Limit:131072KB     64bit IO Format:%I64d & ...

  5. [ACM_动态规划] 轮廓线动态规划——铺放骨牌(状态压缩1)

    Description Squares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One night, af ...

  6. DP大作战—状态压缩dp

    题目描述 阿姆斯特朗回旋加速式阿姆斯特朗炮是一种非常厉害的武器,这种武器可以毁灭自身同行同列两个单位范围内的所有其他单位(其实就是十字型),听起来比红警里面的法国巨炮可是厉害多了.现在,零崎要在地图上 ...

  7. 最大联通子数组之和(dfs,记忆化搜索,状态压缩)

    最大联通子数组,这次的题目,我采用的方法为dfs搜索,按照已经取到的数v[][],来进行搜索过程的状态转移,每次对v[][]中标记为1的所有元素依次取其相邻的未被标记为1的元素,将其标记为1,然而,这 ...

  8. HDU 2809 God of War(DP + 状态压缩)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2809 题目大意:给出战神吕布的初始攻击力ATI.防御力DEF.生命值HP.每升一级增加的攻击力In_A ...

  9. 状态压缩动态规划 状压DP

    总述 状态压缩动态规划,就是我们俗称的状压DP,是利用计算机二进制的性质来描述状态的一种DP方式 很多棋盘问题都运用到了状压,同时,状压也很经常和BFS及DP连用,例题里会给出介绍 有了状态,DP就比 ...

随机推荐

  1. 🍓 JRoll、React滑动删除 🍓

    import React, { Component } from 'react'; import '../src/css/reset.css'; import '../src/css/delete.c ...

  2. CSL 的字符串(单调栈)

    题目链接:https://ac.nowcoder.com/acm/contest/551/D 题目大意: 题目描述 CSL 以前不会字符串算法,经过一年的训练,他还是不会……于是他打算向你求助. 给定 ...

  3. Sprng4之JDBC--很原始的使用方法

    \[www.dev1234.com]一头扎进Spring4视频教程\一头扎进Spring4源码\[www.java1234.com]<一头扎进Spring4>第九讲 源码\Spring40 ...

  4. 第六天-request response\04-response实现文件下载.avi--本人测试失败

    package cn.itcast.response; import java.io.FileInputStream;import java.io.IOException;import java.io ...

  5. python笔记(优化相关)

    1. 列表推导: https://www.cnblogs.com/liu-shuai/p/6098227.html 列表推导的速度比普通循环快一倍左右 2. 尽可能多地使用内置方法: https:// ...

  6. Django学习手册 - 连接mysql数据库

    版本问题: 首先确认django.msql.python版本是统一支持 当前所用的版本信息: Django setting.py 配置 替换之前的DATABASES 配置: DATABASES = { ...

  7. 【NLP CS224N笔记】Lecture 2 - Word Vector Representations: word2vec

    I. Word meaning Meaning的定义有很多种,其中有: the idea that is represented by a word,phrase,etc. the idea that ...

  8. pythonの递归锁

    首先看一个例子,让我们lock = threading.Lock() 时(代码第33行),程序会卡死在这里 #!/usr/bin/env python import threading,time de ...

  9. WPF C# int.TryParse的用法

    ; if (!int.TryParse(item.Tag.ToString(), out comld)) { continue; } 没转换成功就continue 开始写成 if(GetNumber( ...

  10. FAT文件系统规范v1.03学习笔记---4.文件和目录数据区之长目录项

    1.前言 本文主要是对Microsoft Extensible Firmware Initiative FAT32 File System Specification中文翻译版的学习笔记. 每个FAT ...