poj2817WordStack(状压)
与上题类似 预处理一下各字符串之间最大的相同字符数就可以 注意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(状压)的更多相关文章
- BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3336 Solved: 1936[Submit][ ...
- 【BZOJ-4197】寿司晚宴 状压DP
4197: [Noi2015]寿司晚宴 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 694 Solved: 440[Submit][Status] ...
- nefu1109 游戏争霸赛(状压dp)
题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1109 //我们校赛的一个题,状压dp,还在的人用1表示,被淘汰 ...
- poj3311 TSP经典状压dp(Traveling Saleman Problem)
题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...
- [NOIP2016]愤怒的小鸟 D2 T3 状压DP
[NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...
- 【BZOJ2073】[POI2004]PRZ 状压DP
[BZOJ2073][POI2004]PRZ Description 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍 ...
- 【专业找水题】状压dp最水题,没有之一
题目链接 现在代码能力没上升,倒是越来越会找水题了(比例题还水的裸题你值得拥有) 这网站不是针对竞赛的,所以时空限制都很宽松 然后就让我水过去了 对于每个点,包括自己的前m个元素是否取都是一种状态,所 ...
- bzoj3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一(spfa+状压DP)
数据最多14个有宝藏的地方,所以可以想到用状压dp 可以先预处理出每个i到j的路径中最小权值的最大值dis[i][j] 本来想用Floyd写,无奈太弱调不出来..后来改用spfa 然后进行dp,这基本 ...
- 【BZOJ-3195】奇怪的道路 状压DP (好题!)
3195: [Jxoi2012]奇怪的道路 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 305 Solved: 184[Submit][Statu ...
随机推荐
- Oracle每10天删除数据,并重建索引
declare datDateFrom date := to_date('2010/08/01 00:00:00','yyyy/mm/dd hh24:mi:ss'); datDateTo date; ...
- 08_XML的解析_SAX解析
[对比SAX解析和DOM解析] * 在使用DOM解析XMl文档时,需要读取整个XML文档,在内存中架构代表整个DOM树的DOcument对象,从而对XML文档进行操作,在这种情况下,如果XML文档特别 ...
- C++中使用多线程
使用的函数是CreateThread和CloseHandle相互配合. 举个简单的例子: 申明类变量 HANDLE hThread; DWORD ThreadID; 在需要创建线程的地方使用: hTh ...
- day19 数据库的初步认识
一:数据库的概念 数据库:一个用于储存数据并可以对之进行管理和使用的软件系统. sql:struct(结构) query(查询) language(语言) 结构化查询语言: 其实是一种国际化语言标 ...
- C/C++代码检视实例
相关文章链接如下: 微软过桥问题与测试人员素养 等价类分法 新解 测试用例设计中的NP难题 90%程序员写不出无BUG的二分查找程序? C/C++代码检视要点 4.1 代码检视 ...
- 三种读写XML的方法
XML文件是一种常用的文件格式,例如WinForm里面的app.config以及Web程序中的web.config文件,还有许多重要的场所都有它的身影.Xml是Internet环境中跨平台的,依赖于内 ...
- 解决IE 下div与img重叠无法触发鼠标事件的问题
在IE下当我想在img标签上层显示一个div元素时,此时如果该div的background为空白(没有设置图片.或者颜色填充),会导致该div的鼠标事件失效:如果设置border为1px solid ...
- Python 中模块间全局变量的使用上的注意
最近用Python写代码,需要用到模块间的全局变量. 网上四处搜索,发现普遍做法是把全局变量放到一个独立的模块中,使用时,导入此全局变量模块即可. 但是在实际使用过程中发现了些小问题:在使用如下代码导 ...
- Distributed R
R语言的分布式目前有这几个产品: (A)RHadoop:对hadoop族系的产品,其中提供了以下的组件 A.1 rhdfs 浏览读取增加修改hdfs上面的文件数据: A.2 rhbase 浏览读取增 ...
- mysql将多张表COUNT的数据相加
由于数据量过大,我们将根据用户id 将数据存储在不同的表中,根据用户id模10的余数作为表的后缀.有如下十张表:test_0, test_1, ... ,test_9现在需要根据某个条件查询统计数据我 ...