UVA - 10723 Alibaba (dp)
给你两个长度不超过30的字符串序列,让你找到一个最短的字符串,使得给定的两个字符串均是它的子序列(不一定连续),求出最短长度以及符合条件的解的个数。
定义状态(a,b,c)为当前字符串长度为a,其中包含了第一个字符串的前b个字母和第二个字符串的前c个字母组成的子序列的状态
初始状态为(0,0,0),利用bfs刷表,直到刷出状态(?,l1,l2)为止(l1为一个个字符串的长度,l2同理)。由于要记录解的个数,所以要开一个数组siz,在刷状态的时候记录到达每个状态的不同方法的数量。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=+,inf=0x3f3f3f3f;
char s1[N],s2[N];
ll siz[N*][N][N],mi,cnt,ka;
struct D {ll a,b,c;};
void bfs() {
mi=inf,cnt=;
ll l1=strlen(s1),l2=strlen(s2);
queue<D> q;
memset(siz,,sizeof siz);
siz[][][]=,q.push({,,});
while(!q.empty()) {
ll a=q.front().a,b=q.front().b,c=q.front().c;
q.pop();
if(a>mi)continue;
if(b==l1&&c==l2) {mi=min(mi,a),cnt+=siz[a][b][c]; continue;}
for(ll i=; i<; ++i) {
ll aa=a+,bb=b,cc=c;
if(s1[b]==i+'A')bb++;
if(s2[c]==i+'A')cc++;
if(!siz[aa][bb][cc])q.push({aa,bb,cc});
siz[aa][bb][cc]+=siz[a][b][c];
}
}
} int main() {
ll T;
for(scanf("%lld",&T),getchar(); T--;) {
printf("Case #%lld: ",++ka);
gets(s1),gets(s2);
bfs();
printf("%lld %lld\n",mi,cnt);
}
return ;
}
UVA - 10723 Alibaba (dp)的更多相关文章
- UVa 10723 LCS变形 Cyborg Genes
题解转自: UVA 10723 Cyborg Genes - Staginner - 博客园 首先这个题目肯定是按最长公共子序列的形式进行dp的,因为只有保证消去的一部分是最长公共子序列才能保证最后生 ...
- UVA.10192 Vacation (DP LCS)
UVA.10192 Vacation (DP LCS) 题意分析 某人要指定旅游路线,父母分别给出了一系列城市的旅游顺序,求满足父母建议的最大的城市数量是多少. 对于父母的建议分别作为2个子串,对其做 ...
- UVA.10130 SuperSale (DP 01背包)
UVA.10130 SuperSale (DP 01背包) 题意分析 现在有一家人去超市购物.每个人都有所能携带的重量上限.超市中的每个商品有其相应的价值和重量,并且有规定,每人每种商品最多购买一个. ...
- UVA - 1632 Alibaba 区间dp
题意:给定n个点,其中第i个点的坐标是,且它会在秒后消失.Alibaba可以从任意位置出发,求访问完所有点的最短时间.无解输出No solution. 思路:表示访问完区间后停留在i点的最短时间,表示 ...
- UVA - 1632 Alibaba (区间dp+常数优化)
题目链接 设$dp[l][r][p]$为走完区间$[l,r]$,在端点$p$时所需的最短时间($p=0$代表在左端点,$p=1$代表在右端点) 根据题意显然有状态转移方程$\left\{\begin{ ...
- UVa 10723 Cyborg Genes (LCS, DP)
题意:给定两行字符串,让你找出一个最短的序列,使得这两个字符串是它的子串,并且求出有多少种. 析:这个题和LCS很像,我们就可以利用这个思想,首先是求最短的长度,不就是两个字符串长度之和再减去公共的么 ...
- BZOJ 1260&UVa 4394 区间DP
题意: 给一段字符串成段染色,问染成目标串最少次数. SOL: 区间DP... DP[i][j]表示从i染到j最小代价 转移:dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k ...
- UVa 10029 hash + dp
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- uva 10154 贪心+dp
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...
随机推荐
- Web安全相关资料
Asp.net安全架构: http://www.cnblogs.com/luminji/category/381486.html
- MYSQL:基础—主键
MYSQL:基础—主键 1.什么是主键 表中的每一行都应该具有可以唯一标识自己的一列(或一组列).而这个承担标识作用的列称为主键. 如果没有主键,数据的管理将会十分混乱.比如会存在多条一模一样的记录, ...
- ABP框架数据迁移报错
问题描述:将项目从TFS载下来 然后敲update-database 进行数据迁移 提示:Update-Database : 无法将“Update-Database”项识别为 cmdlet.函数.脚 ...
- loadrunder之脚本篇——接口传参为本地文件
导言 前几天需要对公司一个专门很重要的接口进行压测,这个还不是重点,重点是传参为本地的图片!刚刚开始通过web_custom_request()函数来解决,可是脚本并不能通过!后面又百度不到答案,通过 ...
- C++中引用编译过的C代码为什么要用“extern c”
函数经过编译系统的翻译成汇编,函数名对应着汇编标号. 因为C编译函数名与得到的汇编代号基本一样,如:fun()=>_fun, main=>_main 但是C++中函数名与得到的汇编代号 ...
- webstrom突然不显示文件夹
不知道什么原因,webstrom突然不显示文件夹了,弄得几乎都不能用了... 百度搜了一下解决方案: 问题原因:webstorm自动生成的配置文件 .idea/modules.xml损坏(就是我一开始 ...
- java 监控命令
jps 查找java所有进程及对应pid -v 列出启动参数 有些默认的参数,使用-v是看不到的,需要执行如下: jcmd pid VM.flags jstack pid 查看该进程的堆栈信息 找到进 ...
- HBase协处理器的使用(添加Solr二级索引)
给HBase添加一二级索引,HBase协处理器结合solr 代码如下 package com.hbase.coprocessor; import java.io.IOException; import ...
- linux图形界面基本知识(X、X11、Xfree86、Xorg、GNOME、KDE之间的关系)
linux图形界面基本知识(X.X11.Xfree86.Xorg.GNOME.KDE之间的关系)(转自互联网) LINUX初学者经常分不清楚linux和X之间,X和Xfree86之间,X和KDE,GN ...
- 离线unity API文档
只要安装的时候勾选上document 打开unity选择help-ScriptReference就可以打开本地API了.