每日打卡(1/1)
传送门:点击打开链接
因为临近蓝桥杯,所以先刷一些基础DP,练练搜索,再练一两道线段树、STL、图论的题目,就可以上战场了。
当然,全排列在星期五会着重练习。
题目大意:
求最少增加几个字符,使原串成为一个回文序列。
思路:
先将原字串倒过来存储,新的字串记为 s2, 再求它与第一个字串的最长公共子序列。用长度减去这个最长公共子序列的长度即可- -
#include<bits/stdc++.h>
using namespace std;
const int maxn = 25;
int t,a[maxn],n,dp[maxn];
int main()
{
scanf("%d",&t);
while(t--)
{
memset(dp,0,sizeof(dp));
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
int ans = -1;
for(int i=1;i<n;i++)
{
for(int j=0;j<i;j++)
{
if(a[i]<a[j])
dp[i] = max(dp[i],dp[j]+1);
}
ans = max(ans,dp[i]);
}
cout<<ans+1<<endl;
}
return 0;
}