题目 2268: [蓝桥杯][2016年第七届真题]密码脱落
一开始不知道怎么做,后来看题解说,就是求原序列和逆转序列的最长公共子序列,总长度减去它的长度就是答案。
求两个序列的最长公共子序列是一道经典的动态规划的题目!要记得!
设序列 X=<x1, x2, …, xm> 和 Y=<y1, y2, …, yn> 的一个最长公共子序列 Z=<z1, z2, …, zk>,则:
- 若 xm = yn,则 zk = xm = yn 则 Zk-1 是 Xm-1 和 Yn-1 的最长公共子序列;
- 若 xm ≠ yn 且 zk≠xm ,则 Z是 Xm-1 和 Y 的最长公共子序列;
- 若 xm ≠ yn 且 zk ≠yn ,则 Z 是X和 Yn-1 的最长公共子序列。
动态转移方程如下:
(填表)求解过程
java代码如下:
import java.util.Scanner;
public class 密码脱落 {
static char[] a,b;
static int[][] L;
public static void main(String[] args) {
Scanner scanner = new Scanner(System