对每个位置进行操作,求出最终变成相同字母的代价,然后把所有的位上代价加起来,使得总代价最小。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的更多相关文章

  1. hdu String Problem(最小表示法入门题)

    hdu 3374 String Problem 最小表示法 view code#include <iostream> #include <cstdio> #include &l ...

  2. HDU 3374 String Problem(KMP+最大/最小表示)

    String Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  3. 【HDU3374】 String Problem (最小最大表示法+KMP)

    String Problem Description Give you a string with length N, you can generate N strings by left shift ...

  4. HDOJ3374 String Problem 【KMP】+【最小表示法】

    String Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  5. HDU 3374 String Problem (KMP+最大最小表示)

    HDU 3374 String Problem (KMP+最大最小表示) String Problem Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  6. String Problem hdu 3374 最小表示法加KMP的next数组

    String Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  7. ACM-ICPC2018南京赛区 Mediocre String Problem

    Mediocre String Problem 题解: 很容易想到将第一个串反过来,然后对于s串的每个位置可以求出t的前缀和它匹配了多少个(EXKMP 或者 二分+hash). 然后剩下的就是要处理以 ...

  8. hdu3374 String Problem【最小表示法】【exKMP】

    String Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  9. hdu 5772 String problem 最大权闭合子图

    String problem 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5772 Description This is a simple pro ...

随机推荐

  1. hazelcast的坑爹事

    转载自 http://blog.csdn.net/hengyunabc/article/details/18514563 简介 开源中国的简介: Hazelcast是一个高度可扩展的数据分发和集群平台 ...

  2. [02] Oracle简单单行函数(字符+数值+日期+转换+通用)

    1. 字符函数 --upper(str), lower(str):将str转换成大,小写 select upper('hello') as x1, lower('HELlo') as x2 from ...

  3. c# 串口发送接收数据

    /********************** 串口数据接收事件 *****************************/ private void SerialPort_DataReceived ...

  4. Dao模型设计(基于Dao与Hebernate框架)

    以前没有Dao设计模型之前,一般都是这样的流程: ①先设计实体对象 学生对象: package com.itheima.domain; import java.io.Serializable; imp ...

  5. SGU 218.Unstable Systems

    题意: 有n(n<500)台机器,和500个程序.不同的程序在不同的机器上运行有着不同的不稳定度s[i][j].求最小的最大稳定度及其方案. Solution: 比较经典的二分图模型. 建图很简 ...

  6. c++动态绑定与静态绑定

    C++为了支持多态性,采用了动态绑定和静态绑定 相关概念: 对象的静态类型:对象在声明时采用的类型,编译时确定 对象的动态类型:目前所指对象的类型,在运行时确定 class B { } class C ...

  7. EntityClient 介绍

    System.Data.EntityClient 命名空间是 实体框架的 .NET Framework 数据提供程序.EntityClient 提供程序使用存储特定的 ADO.NET 数据提供程序类和 ...

  8. Jquery 动态生成表单 并将表单数据 批量通过Ajax插入到数据库

    利用Jquery 动态生成 Table 表单 之后利用each 方法来遍历所有文本框获取文本的value值  并通过Ajax 将数据 提交到Web服务里把数据插入数据库 Html页面 <!DOC ...

  9. Linux系统的启动流程以及做个小小的Linux

    内核的作用     进程管理:进程间切换     内存管理:内存空间分割为内核空间和用户空间     IO管理:对底层硬件的使用必须由内来实现,不能由用户空间进程来实现     文件系统管理     ...

  10. linux下多线程踩过的坑(不定更新)

    1,多线程下整个进程的退出 <<APUE>>关于进程环境一章中指出了进程退出的8个条件: ... (4)最后一个线程从启动例程中返回 (5)最后一个线程调用pthread_ex ...