2 3 51 52 51 4 51 52 52 51
3 4
跟上一篇都是挺典型的LICS,这次不用输出序列了,但是回文串怎么计算啊==
其实就多了一个对于相同字符的分类讨论==字符相同了,有可能比较的是同一个数,这时候长度加1,值相同,但是不是同一个数,那么长度加2
/********* hdu4512 2016.2.13 0MS 1568K 1074 B G++ *********/ #include <iostream> #include<cstdio> #include<cstring> using namespace std; int n,m,x[205],y[205],dp[205],dp1[205]; void solve() { memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++) { int tmp=0; for(int j=1;j<=n+1-i;j++) { if(x[i]==y[j]) { if(j!=(n-i+1)) { if(dp[j]<dp[tmp]+2) dp[j]=dp[tmp]+2; } else { if(dp[j]<dp[tmp]+1) dp[j]=dp[tmp]+1; } } else if(x[i]>y[j]&&dp[tmp]<dp[j]) tmp=j; } } int maxn=0; for(int i=1;i<=m;i++) if(maxn<dp[i]) maxn=dp[i]; printf("%d\n",maxn); } int main() { //freopen("cin.txt","r",stdin); int t; scanf("%d",&t); while(t--) { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&x[i]); m=n; for(int i=1;i<=m;i++) y[m-i+1]=x[i]; solve(); } return 0; }