hdu 4512 最长公共上升子序列
2014-02-20 09:09
441 查看
首先,这道题要枚举1-n;以这个点为中心把源数据分成两部分,把后面的翻转过来,与前面的求最长公共子序列
#include<cstdio> #include<iostream> #include<cstdio> #include<cstring> using namespace std; int data[1001],data1[1001],num[1001]; int dp[1000]; int LCS(int n,int m,int t) { for(int i=1;i<=n;i++) for(int j=1,tmp=0;j<=m;j++) if(data[i]>data1[j] && dp[j]>tmp) tmp = dp[j]; else if(data[i]==data1[j]) { if(i == n&&j==m ) dp[j] = tmp+1; else dp[j] = tmp + 2; } int ans = 0; for(int i=1;i<=t;i++) ans = max(dp[i],ans); return ans; } int main() { int n,m; int icase; cin>>icase; while(icase--) { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&num[i]); int ans = 0; for(int i=1;i<=n;i++) { for(int j=1;j<=i;j++) data[j] = num[j]; for(int j=n;j>=i;j--) data1[n-j+1] = num[j]; memset(dp,0,sizeof(dp)); ans = max(ans,LCS(i,n-i+1,n)); } cout<<ans<<endl; } }
相关文章推荐
- HDU 4512 最长公共上升子序列 巧妙应用
- HDU 4512 吉哥系列故事――完美队形I(最长公共上升子序列)
- hdu 4512 吉哥系列故事——完美队形I(最长公共上升子序列)
- HDU 4512 吉哥系列故事——完美队形I(LCIS最长公共上升子序列)
- HDU-4512 吉哥系列故事——完美队形I 最长公共上升子序列
- HDU 4512 最长公共上升子序列
- HDU 3525 Orienteering (最长公共子串转化为最长上升子序列)
- hdu 1423 Greatest Common Increasing Subsequence(DP 最长公共上升子序列)
- hdu 1423 dp 求最长公共上升子序列
- HDU 3525 Orienteering (最长公共子串转化为最长上升子序列)
- hdu 1423 Greatest Common Increasing Subsequence(DP 最长公共上升子序列)
- hdu 4512 吉哥系列故事——完美队形I(最长上升公共子序列)
- hdu 1423 Greatest Common Increasing Subsequence 最长公共上升子序列
- [HDU 4512] 吉哥系列故事——完美队形I 最长上升公共子序列
- hdu 1423+hdu 4512 最长公共递增子序列
- HDOJ4512 最长公共上升子序列
- hdu 4512 吉哥系列故事——完美队形I(最长公共上升自序加强版)
- hdu 4512 吉哥系列故事——完美队形I(最长上升公共子串)
- hdu 4512 吉哥系列故事——完美队形I(最长公共上升自序加强版)
- hdu 4512 吉哥系列故事——完美队形I(最长公共上升序列)