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 ...
随机推荐
- Service层和DTO层的作用
Service层主要提供的几个作用:1.将业务逻辑层进行封装,对外提供业务服务调用.2.通过外观模式,屏蔽业务逻辑内部方法.3.降低业务逻辑层与UI层的依赖,业务逻辑接口或实现的变化不会影像UI层.4 ...
- 在List中找出最大值的两种方法
先说需求:找出一个对象List中,某个属性值最大的对象. 1.定义对象 private class A { public int ID { get; set; } public string Name ...
- C#做的一个加密/解密的类
转自:http://www.16aspx.com/Article/3904 using System; using System.Security.Cryptography; using System ...
- Chrome资源加载被Cancel的问题
好个表久没写文章了. 做为一个砖业的砖工只能天天搬砖做些没有营养没有技术难度的活儿. 最近折腾个网站.发现一个很奇怪的问题- 各种图片的请求被取消了状态为Canceled. 顿时Chrome变成一个更 ...
- (五)Hibernate 操作对象
所有项目导入对应的hibernate的jar包.mysql的jar包和添加每次都需要用到的HibernateUtil.java 第一节:Hibernate 中四种对象状态 临时状态(transient ...
- 类库探源——System.Drawing
一.System.Drawing 命名空间简述 System.Drawing 命名空间提供访问 GDI+ 的基本功能,更高级的功能在 System.Drawing.Drawing2D,System.D ...
- java ,js获取web工程路径
一.java获取web工程路径 1),在servlet可以用一下方法取得: request.getRealPath(“/”) 例如:filepach = request.getRealPath(“/” ...
- jQuery的基础语法实例
jQuery 基础语法 jQuery 语法是为 HTML 元素的选取编制的,可以对元素执行某些操作. 基础语法是:$(selector).action() 美元符号定义 jQuery 选择符(sele ...
- Dao模型设计(基于Dao与Hebernate框架)
以前没有Dao设计模型之前,一般都是这样的流程: ①先设计实体对象 学生对象: package com.itheima.domain; import java.io.Serializable; imp ...
- linux驱动(一)
编写模块必须先声明下面两句: #include <linux/module.h> //这个头文件包含了许多符号与函数的定义,这些符号与函数多与加载模块有关 #i ...