poj 1080 DP 2个串,中间可加‘-’变成长度相同的串,求最小代价
2017-05-12 14:58
162 查看
#include<cstdio> #include<cstring> #define MAX(x,y) ((x)>(y)?(x):(y)) int dp[160][160]; char str1[160],str2[160]; int len1,len2; int cout[5][5]={{5,-1,-2,-1,-3}, {-1,5,-3,-2,-4}, {-2,-3,5,-2,-2}, {-1,-2,-2,5,-1}, {-3,-4,-2,-1,0}}; int cal(char a,char b) { int t1,t2; switch(a) { case'A':t1=0;break; case'C':t1=1;break; case'G':t1=2;break; case'T':t1=3;break; default:t1=4; } switch(b) { case'A':t2=0;break; case'C':t2=1;break; case'G':t2=2;break; case'T':t2=3;break; default:t2=4; } return cout[t1][t2]; } int main() { int T; scanf("%d",&T); while(T--) { scanf("%d%s",&len1,str1+1); scanf("%d%s",&len2,str2+1); dp[0][0]=0; for(int i=1;i<=len1;i++) dp[i][0]=dp[i-1][0]+cal(str1[i],' '); for(int j=1;j<=len2;j++) dp[0][j]=dp[0][j-1]+cal(' ',str2[j]); for(int i=1;i<=len1;i++) for(int j=1;j<=len2;j++) { if(str1[i]==str2[j]) dp[i][j]=dp[i-1][j-1]+5; else { dp[i][j]=MAX(dp[i-1][j]+cal(str1[i],' '),dp[i][j-1]+cal(' ',str2[j])); dp[i][j]=MAX(dp[i][j],dp[i-1][j-1]+cal(str1[i],str2[j])); } } printf("%d\n",dp[len1][len2]); } return 0; }
相关文章推荐
- 【codeforces 13 C】【DP + 离散化 + 贪心+滚动数组 】C. Sequence【用最小代价把序列变成非严格递增序列】
- (字符串的处理4.7.16)POJ 1159 Palindrome(让一个字符串变成回文串需要插入多少个字符...先逆序,在减去公共子序列的最大长度即可)
- Codeforces Round #371 (Div. 2) E 【DP+离散化 LIS 】用最小代价把序列变成严格递增序列
- poj 3415 Common Substrings(长度大于k的相同子串对数xian 后缀数组+单调桟统计)
- poj 2752 Seek the Name, Seek the Fame【KMP算法分析记录】【求前后缀相同的子串的长度】
- 编程之美 2.18数组分割 将一个长度为2N的数组分割成2个长度为N的数组,且两数组的和的差的绝对值最小,即和最接近 动态规划?????????????????????????????????????
- (Relax 贪心1.7)POJ 2393 Yogurt factory(求囤积货物的最小代价)
- 【UVa 10003】【区间DP】Cutting Sticks【有一个长为L的木棍,木棍中间有n个切点。每次切割的费用为当前木棍的长度。求切割木棍的最小费用。】
- hdu4714 Tree2cycle 使一棵树变成环最小代价
- 长度为2N的数组分割成2个长度为N的数组,且两数组的和的差的绝对值最小
- poj 3171 dp+线段树(最小代价覆盖全部区间)
- 【求最小代价环floyd】POJ 1734
- (字符串的处理4.7.16)POJ 1159 Palindrome(让一个字符串变成回文串需要插入多少个字符...先逆序,在减去公共子序列的最大长度即可)
- poj 3270 Cow Sorting 【置换群】【求 把一个序列变成升序 所需代价】
- Java判断2个数组里是否包含相同的元素(长度一致)
- 、给一组字符串,需要你输出最小长度的字符串与最大长度的字符串,如果有相同最小(大)长度的,就按照给的顺序挨个输出。
- 使用jQuery使JSP页面中2个div的长度保持相同
- POJ 3154/模拟(最小墓地移动长度)
- POJ 1679 The Unique MST 最小代价生成树 次小代价生成树
- POJ 3280 Cheapest Palindrome (将一个字符串变为回文串的最小代价) 区间dp