1.人过大佛寺*我=寺佛大过人
#include<iostream>
using namespace std;
#define true 1
#define false 0
int main()
{
bool flag;
bool IsUsed[10];
int number,revert_number,t,v;
for(number=10234;number<=98765;number++)
{
flag=true;
memset(IsUsed,0,sizeof(IsUsed));
t=number;
revert_number=0;
for(int i=0;i<5;i++)
{
v=t%10;
if(IsUsed[v])
{
flag=false;
break;
}
else IsUsed[v]=1;
revert_number=revert_number*10+v;
t/=10;
}
if(flag&&(revert_number%number==0))
{
v=revert_number/number;
if(v<10&&!IsUsed[v])cout<<number<<'*'<<v<<'='<<revert_number<<endl;
}
}
return 0;
}
1.最长回文子串
2.最长回文子序列
int LPS(string s)
{
int n=s.size();
vector<vector<int> > dp(n,vector<int>(n,0));
for(int i=n-1;i>=0;--i)
{
dp[i][i]=1;
for(int j=i+1;j<n;++j)
{
if(s[i]==s[j])dp[i][j]=dp[i+1][j-1]+2;
else dp[i][j]=max(dp[i][j-1],dp[i+1][j]);
}
}
return dp[0][n-1];
}
//滚动数组
int LPS(string s)
{
int n=s.size();
vector<vector<int> > dp(2,vector<int>(n,0));
int now=0;
for(int i=n-1;i>=0;--i)
{
dp[i][i]=1;
for(int j=i+1;j<n;++j)
{
if(s[i]==s[j])dp[now][j]=dp[1-now][j-1]+2;
else dp[now][j]=max(dp[now][j-1],dp[1-now][j]);
}
now=1-now;
}
return n&1?dp[0][n-1]:dp[1][n-1];
}