P12346[蓝桥杯 2025 省A 第二场]基因配对 动态规划做法
wangwang0307 · · 题解
思路
可以用动态规划做。
我们设传进来的字符串为
状态:
状态转移方程:当
AC CODE
#include<iostream>
#include<queue>
#include<utility>
#include<algorithm>
#include<iomanip>
#include<cstring>
#include<cmath>
#include<string>
#include<climits>
#include<vector>
namespace noip {
using Int=long long;
constexpr Int Max_N=1000;
char a[1+Max_N];
Int f[1+Max_N][1+Max_N]{};
void init(){}
void main(){
std::cin>>a;Int n=std::strlen(a);
for(Int i=n;i--;){
for(Int j=n;j--;){
f[i][j]=a[j]!=a[i]?1+f[i+1][j+1]:0;
}
}
Int ans=0;
for(Int i=0;i<n;i++){
for(Int j=i+1;j<n;j++){
ans+=std::min(j-i,f[i][j]);//防止计算的两个子串重叠,因为题目要求 b 小于 c
}
}
std::cout<<ans<<std::endl;
}
}
int main(){
noip::init();
noip::main();
return 0;
}