CF 33B String Problem
对每个位置进行操作,求出最终变成相同字母的代价,然后把所有的位上代价加起来,使得总代价最小。res[i][j]表示将字母i+'a'和字母j+'a'变为相同的代价,设最终都变成字母k+'a',那么res[i][j]<?=dp[i][k]+dp[k][j],dp[i][k]表示将字母i+'a'最终变成j+'a'所需的代价,也就是点i到j的最短路径长度,Floyd—Warshall算法可解决。
rec[i][j]记录i和j最终变成的字母-'a'.
#include<stdio.h>
#include<string.h>
#define N 100010
#define M 30
#define INF 9999
#define min(a,b) ((a)>(b)?(b):(a)) int dp[M][M],rec[M][M],res[M][M],vis[M][M];
char s[N],t[N]; int find(int i,int j)
{
if(vis[i][j])
return res[i][j];
int k,ans=res[i][j];
vis[i][j]=vis[j][i]=; for(k=; k<; k++)
if(dp[i][k]+dp[j][k]<ans)
{
ans=dp[i][k]+dp[j][k];
rec[j][i]=rec[i][j]=k;
} return res[i][j]=res[j][i]=ans;
} int main(void)
{
gets(s);
gets(t);
char ch1,ch2;
int n,i,j,k;
for(i=; i<; i++)
for(j=; j<; j++)
if(i==j)vis[i][j],rec[i][j]=j;
else dp[i][j]=INF,res[i][j]=INF,rec[i][j]=-;//将i!=j的点初始状态用INF表示为不可连通 scanf("%d",&n);
getchar(); for(i=; i<=n; i++)
{
int w;
scanf("%c %c %d",&ch1,&ch2,&w);
getchar();
ch1-='a';
ch2-='a';
dp[ch1][ch2]=min(w,dp[ch1][ch2]);
} for(k=; k<; k++)
for(i=; i<; i++)
for(j=; j<; j++)
dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]); int te,sum=;
int len1=strlen(s);
int len2=strlen(t);
if(len1-len2)
printf("-1\n");
else
{
for(i=; i<len1; i++)
{
ch1=s[i]-'a';
ch2=t[i]-'a';
te=find(ch1,ch2);
if(te>=INF)
return printf("-1\n"),;
else
{
sum+=te;
s[i]=rec[ch1][ch2]+'a';
}
}
printf("%d\n",sum);
puts(s);
}
return ;
}
CF 33B String Problem的更多相关文章
- hdu String Problem(最小表示法入门题)
hdu 3374 String Problem 最小表示法 view code#include <iostream> #include <cstdio> #include &l ...
- HDU 3374 String Problem(KMP+最大/最小表示)
String Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- 【HDU3374】 String Problem (最小最大表示法+KMP)
String Problem Description Give you a string with length N, you can generate N strings by left shift ...
- HDOJ3374 String Problem 【KMP】+【最小表示法】
String Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- HDU 3374 String Problem (KMP+最大最小表示)
HDU 3374 String Problem (KMP+最大最小表示) String Problem Time Limit: 2000/1000 MS (Java/Others) Memory ...
- String Problem hdu 3374 最小表示法加KMP的next数组
String Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- ACM-ICPC2018南京赛区 Mediocre String Problem
Mediocre String Problem 题解: 很容易想到将第一个串反过来,然后对于s串的每个位置可以求出t的前缀和它匹配了多少个(EXKMP 或者 二分+hash). 然后剩下的就是要处理以 ...
- hdu3374 String Problem【最小表示法】【exKMP】
String Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- hdu 5772 String problem 最大权闭合子图
String problem 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5772 Description This is a simple pro ...
随机推荐
- UPDATE---修改表中数据
UPDATE table_name SET column1=value1,column2=value2,... [WHERE conditions]; 例: UPDATE userinfo SET n ...
- error: Error: No resource found that matches the given name (at 'layout_above' with value '@id/btnLayout').
今天在练习fragment碎片的时候,进行界面布局的时候出现了这个问题. 后来解决后发现原因很简单:就是因为在布局xml文件中,引用ID和声明ID的顺序必须保证声明在前,引用在后.和布局的顺序无关. ...
- 如何在eclipse使用StaggeredGridView
概述 现在的开发工具基本都用AndroidStudio了.网上的开源框架也是.比如做瀑布式UI的StaggeredGridView,还有导航页的PagerSlidingTabStrip等. 那么电脑 ...
- 对bigDecimal的一些探索
一般直接用简单的double等来做浮点计算可能会因为计算机的浮点运算机制出现一点问题,不符合生活中的计算常识,于是java就给我们包装了大数据类,bigdecimal用于处理浮点数据类.当然也有处理整 ...
- Android adapter适配器的使用
说起Adapter的使用,首先想到的就是listview或各种各样的Adapter.下面我们对常用的一些Adapter进行简单的使用讲解. 这是Adapter的关系图: 下面的所有例子均使用同一个布局 ...
- xpath选择器
一.xpath中节点关系 父(Parent):每个元素以及属性都有一个父 子(Children):元素节点可有零个.一个或多个子 同胞(Sibling):拥有相同的父的节点 先辈(Ancestor): ...
- dbforge studio for mysql 怎样破解
下载好dbforge studio压缩包有两个exe,dbforge.studio.for.mysql.6.0.315-loader.exe ,和dbforgemysql.exe,安装后目录在C:\P ...
- c#接口深入一步探究其作用,适合新人了解
前言 前一篇浅显的述说了一下c#接口的作用,并用了一个不怎么好的例子述说了一下.时隔一天,在看完大家的评论后我在论坛中查看了很多前辈们对c#接口的描述,发现大家对例子的说明不是太容易让我们这些新人理解 ...
- 关于C++对汉字拼音的处理——终结篇
以前写过了3个博文,都是关于汉字转拼音的,后来发现都不是很“完美”的解决方案,第一个和第二个利用的unicode编码的范围进行确定汉字的拼音,但是难免有遗漏,这个在后面的实践中发现的,后来第三个方法是 ...
- C++类继承内存布局(三)
参考:http://blog.csdn.net/jiangyi711/article/details/4890889# (三)成员函数 类X中每一个非静态成员函数都会接受一个特殊的隐藏参数——this ...