链接

与上题类似  预处理一下各字符串之间最大的相同字符数就可以 注意dp要初始为负无穷

 #include <iostream>
#include<cstdio>
#include<cstring>
#include<stdlib.h>
#include<algorithm>
using namespace std;
#define N 1050
int dp[N][],k[],q[][N],w[][],f[N];
char s[][];
int compare(int x,int y)
{
int i,j,maxz=;
for(i = ; i < k[x] ; i++)
for(j = ; j < k[y] ; j++)
{
if(s[x][i]==s[y][j])
{
int ii = i+,jj = j+,o=;
while(ii<k[x]&&jj<k[y])
{
if(s[x][ii]==s[y][jj])
o++;
ii++;jj++;
}
maxz = max(o,maxz);
}
}
return maxz;
}
int main()
{
int i,j,n,e,o;
while(scanf("%d%*c",&n)&&n)
{
int kk=;
memset(w,,sizeof(w));
memset(dp,,sizeof(dp));
memset(f,,sizeof(f));
for(i = ; i < n ; i++)
{
scanf("%s",s[i]);
k[i] = strlen(s[i]);
}
for(i = ; i < n ;i++)
{
q[][i] = <<i;
dp[<<i][i] = ;
}
kk = n;
for(i =; i < n ; i++)
for(j = i+; j < n ; j++)
{
w[i][j] = compare(i,j);
w[j][i] = w[i][j];
}
for(i = ; i < n ; i++)
{
int tt=;
for(j = ; j < kk ; j++)
{
for(e = ; e < n ; e++)
{
for(o = ; o < n ; o++)
{
if(((~q[(i-)%][j])&(<<o))==)
continue;
int oo = q[(i-)%][j]+(<<o);
if(o==e)
continue;
dp[oo][o] = max(dp[oo][o],dp[q[(i-)%][j]][e]+w[e][o]);
if(!f[oo])
{
q[i%][tt++] = oo;
f[oo] = ;
}
}
}
}
kk = tt;
}
int ans = ;
for(i = ; i < n ;i++)
ans = max(ans,dp[(<<n)-][i]);
printf("%d\n",ans);
}
return ;
}

poj2817WordStack(状压)的更多相关文章

  1. BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]

    1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3336  Solved: 1936[Submit][ ...

  2. 【BZOJ-4197】寿司晚宴 状压DP

    4197: [Noi2015]寿司晚宴 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 694  Solved: 440[Submit][Status] ...

  3. nefu1109 游戏争霸赛(状压dp)

    题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1109 //我们校赛的一个题,状压dp,还在的人用1表示,被淘汰 ...

  4. poj3311 TSP经典状压dp(Traveling Saleman Problem)

    题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...

  5. [NOIP2016]愤怒的小鸟 D2 T3 状压DP

    [NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...

  6. 【BZOJ2073】[POI2004]PRZ 状压DP

    [BZOJ2073][POI2004]PRZ Description 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍 ...

  7. 【专业找水题】状压dp最水题,没有之一

    题目链接 现在代码能力没上升,倒是越来越会找水题了(比例题还水的裸题你值得拥有) 这网站不是针对竞赛的,所以时空限制都很宽松 然后就让我水过去了 对于每个点,包括自己的前m个元素是否取都是一种状态,所 ...

  8. bzoj3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一(spfa+状压DP)

    数据最多14个有宝藏的地方,所以可以想到用状压dp 可以先预处理出每个i到j的路径中最小权值的最大值dis[i][j] 本来想用Floyd写,无奈太弱调不出来..后来改用spfa 然后进行dp,这基本 ...

  9. 【BZOJ-3195】奇怪的道路 状压DP (好题!)

    3195: [Jxoi2012]奇怪的道路 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 305  Solved: 184[Submit][Statu ...

随机推荐

  1. asp.net 备份和恢复数据库

    观看了Insus的视频写下来的,代码可能有点冗长,如有好的想法的,可以多交流. 前台: <form id="form1" runat="server"&g ...

  2. 计算 unique word numbers

    计算不重复单词的个数 参考: 1.Unique words count

  3. C# 刷新当前窗体

    在有多个窗体时,刷新当前激活的窗体 在MainForm.cs中: private void m_reflashtoolStripButton1_Click(object sender, EventAr ...

  4. 工厂方法(Factory Pattern)

    工厂方法模式定义:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个.工厂方法让类把实例化推迟到子类.(注:“决定”不是指模式允许子类本身在运行时做决定,而是指在编写创建者类时,不需要知道实际 ...

  5. Redis和Memcache的区别分析 [转]

    1. Redis中,并不是所有的数据都一直存储在内存中的,这是和Memcached相比一个最大的区别. 2. Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构 ...

  6. make menuconfig出错需要安装文件

    $ make menuconfig *** Unable to find the ncurses libraries or the *** required header files. *** 'ma ...

  7. form表单重置

    Jquery中重置表单的错误姿势 $('#yigeform').reset() 正确姿势 $('#yigeform')[0].reset()

  8. GDI+ 如何将图片绘制成圆形的图片

    大概意思就是不生成新的图片,而是将图片转换为圆形图片. 实现代码如下: private Image CutEllipse(Image img, Rectangle rec, Size size) { ...

  9. web api写api接口时返回

    web api写api接口时默认返回的是把你的对象序列化后以XML形式返回,那么怎样才能让其返回为json呢,下面就介绍两种方法: 方法一:(改配置法) 找到Global.asax文件,在Applic ...

  10. 《C和指针》读书笔记——第二章 基本概念

    1.编译过程: source code→Compiler→Object code→Linker←Lib ↓ Exe 2.经过初始化的静态变量(static)在程序执行前能获得他们的值. 3.绝大多数环 ...