密码脱落(最长回文子序列)

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

int f[1005][1005];
int main() {
    string s;cin>>s;
    int n=s.size();
    for(int i=0;i<n;i++){
    	f[i][i]=1;
	}
	for(int i=n-2;i>=0;i--){ // 从倒数第二个字符开始
		for(int j=i+1;j<n;j++){ // 到字符串末尾
			if(s[i]==s[j]){ // 如果两端字符相同,则回文子序列长度是中间部分+2
				f[i][j]=f[i+1][j-1]+2;
			} else{ // 如果两端字符不同,则取去掉左端或去掉右端的最大值
				f[i][j] =max(f[i+1][j],f[i][j-1]);
			}
		}
	}
	cout<<n-f[0][n-1];
    
    return 0;
}

f[i][j] 表示子串 s[i..j] 的最长回文子序列长度

相关推荐
是wzoi的一名用户啊~1 分钟前
【C++小游戏】2048
开发语言·c++
Sunshine for you39 分钟前
C++中的职责链模式实战
开发语言·c++·算法
qq_416018721 小时前
C++中的状态模式
开发语言·c++·算法
2401_884563241 小时前
模板代码生成工具
开发语言·c++·算法
2401_831920741 小时前
C++代码国际化支持
开发语言·c++·算法
m0_672703311 小时前
上机练习第51天
数据结构·c++·算法
ArturiaZ1 小时前
【day60】
算法·深度优先·图论
2401_851272992 小时前
自定义内存检测工具
开发语言·c++·算法
☆5662 小时前
C++中的命令模式
开发语言·c++·算法
仰泳的熊猫2 小时前
题目2577:蓝桥杯2020年第十一届省赛真题-走方格
数据结构·c++·算法·蓝桥杯