POJ3356-AGTC(编辑距离)
来源:互联网 发布:java第三方服务器ftp 编辑:程序博客网 时间:2024/04/19 14:35
AGTC
Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 13042 Accepted: 4917
Description
Let x and y be two strings over some finite alphabet A. We would like to transform x into y allowing only operations given below:
Deletion: a letter in x is missing in y at a corresponding position.
Insertion: a letter in y is missing in x at a corresponding position.
Change: letters at corresponding positions are distinct
Certainly, we would like to minimize the number of all possible operations.
Illustration
A G T A A G T * A G G C
| | | | | | |
A G T * C * T G A C G C
Deletion: * in the bottom line
Insertion: * in the top line
Change: when the letters at the top and bottom are distinct
This tells us that to transform x = AGTCTGACGC into y = AGTAAGTAGGC we would be required to perform 5 operations (2 changes, 2 deletions and 1 insertion). If we want to minimize the number operations, we should do it like
A G T A A G T A G G C
| | | | | | |
A G T C T G * A C G C
and 4 moves would be required (3 changes and 1 deletion).
In this problem we would always consider strings x and y to be fixed, such that the number of letters in x is m and the number of letters in y is n where n ≥ m.
Assign 1 as the cost of an operation performed. Otherwise, assign 0 if there is no operation performed.
Write a program that would minimize the number of possible operations to transform any string x into a string y.
Input
The input consists of the strings x and y prefixed by their respective lengths, which are within 1000.
Output
An integer representing the minimum number of possible operations to transform any string x into a string y.
Sample Input
10 AGTCTGACGC
11 AGTAAGTAGGC
Sample Output
4
Source
Manila 2006
题目大意: 求两个字符串之间的编辑距离
解题思路: dp
对于串
边界:
#include<iostream>#include<cstring>#include<string>#include<vector>#include<algorithm>#include<cstdio>#include<map>#include<set>#include<cmath>#include<cctype>#include<cstdlib>#include<list>#include<iomanip>using namespace std;typedef long long LL;const int MAXN=1e3+10;const int INF=0x3f3f3f3f;char a[MAXN],b[MAXN];int dp[MAXN][MAXN];int main(){ int n,m; while(cin>>n) { cin>>a; cin>>m>>b; memset(dp,0,sizeof(dp)); for(int i=0;i<=n;i++) { dp[i][0]=i; } for(int j=0;j<=m;j++) { dp[0][j]=j; } for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(a[i-1]==b[j-1]) dp[i][j]=dp[i-1][j-1]; else dp[i][j]=min(dp[i-1][j]+1,min(dp[i][j-1]+1,dp[i-1][j-1]+1)); } } cout<<dp[n][m]<<endl; } return 0;}
空间优化:
#include<iostream>#include<cstring>#include<string>#include<vector>#include<algorithm>#include<cstdio>#include<map>#include<set>#include<cmath>#include<cctype>#include<cstdlib>#include<list>#include<iomanip>using namespace std;typedef long long LL;const int MAXN=1e3+10;const int INF=0x3f3f3f3f;char a[MAXN],b[MAXN];int dp[MAXN];int main(){ int n,m; while(cin>>n) { cin>>a; cin>>m>>b; int tl,tmp; memset(dp,0,sizeof(dp)); for(int j=0;j<=m;j++) { dp[j]=j; } for(int i=1;i<=n;i++) { tl=i-1;//top left dp[0]=i;//left for(int j=1;j<=m;j++) { tmp=dp[j]; if(a[i-1]==b[j-1]) dp[j]=tl; else dp[j]=min(dp[j]+1,min(dp[j-1]+1,tl+1)); tl=tmp; } } cout<<dp[m]<<endl; } return 0;}
- POJ3356-AGTC(编辑距离)
- POJ3356:AGTC(最小编辑距离问题)
- dp编辑距离 poj3356 AGTC
- poj3356 AGTC(经典DP最小编辑距离)
- 编辑距离C++实现(poj3356)
- 最小编辑距离-poj3356
- POJ3356 AGTC
- poj3356 - AGTC
- poj3356---AGTC
- POJ-3356(编辑距离)(AGTC)
- POJ 3356 AGTC (编辑距离 DP)
- 最短编辑距离 poj3356
- POJ3356--AGTC(edit distance)动态规划
- poj 3356 AGTC 【编辑距离】
- POJ-3356 AGTC(编辑距离)
- POJ 3356 AGTC(最短编辑距离 DP)
- poj 3356 AGTC(dp 求最短编辑距离)
- poj 3356 AGTC(动态规划:最短编辑距离)
- Spring事务传播属性和隔离级别
- iOS 即时通讯 + 仿微信聊天框架 + 源码
- Linux纲要
- Nginx简介及使用Nginx实现负载均衡的原理
- 在线离线QQ的各种样子
- POJ3356-AGTC(编辑距离)
- 格雷码(多种方法含递归)
- MySQL数据库分区(Database partition)
- org.hibernate.InstantiationException: No default constructor for entity
- 剑指offer_连续子数组的最大和
- 查看多媒体文件速度优化升级
- 我的世界 粘液块科技 配方计算 配方表
- android自定义view之九宫格解锁
- 查询另一张表中某字符出现次数 sql