最长上升子序列 最长公共子序列 最长公共子串 数字三角形 等简单DP以及变形
来源:互联网 发布:上海海隆软件怎么样 编辑:程序博客网 时间:2024/05/01 19:31
于16存17-2-7发出
--------------------------
最长公共子序列问题
#include <iostream>#include <cstring>using namespace std;short dp[510][510];int n;int FinMaxLen(char s[],char p[]){ memset(dp,0,sizeof(dp)); int i,j; int sk=strlen(s),pk=strlen(p); for(i=1;i<=sk;i++) { for (j=1;j<=pk;j++) { if(s[i-1]==p[j-1]) ///si-1 pj-1位相同时 { dp[i][j]=dp[i-1][j-1]+1; ///这时已经匹配位数+1 } else if (s[i-1]!=p[j-1]) { dp[i][j]=max(dp[i-1][j],dp[i][j-1]); ///否则从前一位找大的 } } } return dp[sk][pk]; ///这个矩阵是递增的}int main(){ char s[5010],p[5010]; while (cin>>s>>p) { int out=FinMaxLen(s,p); cout<<out<<endl; } return 0;}
最长上升(下降)子序列问题
///poj1836#include <iostream>#include <cstring>using namespace std;int out,n;double h[1011];int dpl[1011],dpr[1011],dp[1011];int main(){ int i,j; while (cin>>n) { out=1;///out 顺便记录最长子序列以供打印查看使用 for (i=1; i<=n; i++) { cin>>h[i]; dpl[i]=dpr[i]=dp[i]=1; } for (i=2; i<=n; i++) { for (j=1; j<i; j++) { if (h[i] > h[j] && dpl[j]+1 > dpl[i]) ///比前一个大 以及序列长度要长 { dpl[i]=dpl[j]+1; } } ///out=max(out,dpl[i]); } ///cout<<"dpl Maxlen : "<<out<<endl; out=0; for (i=n-1; i>=1; i--) /// 注意dpr求的方向是右到左而不是从左到右 最大下降子序列也是这么求 { /// 定住一个求他的dp值 for (j=n; j>i; j--) { if (h[i] > h[j] && dpr[j]+1 > dpr[i]) { dpr[i]=dpr[j]+1; } } ///out=max(out,dpr[i]); } ///cout<<"dpr Maxlen : "<<out<<endl; out=dpl[n]; for (i=1; i<=n-1; i++) { for (j=i+1; j<=n; j++) { out=max(out,dpl[i]+dpr[j]); } } cout<<n-out<<endl; } return 0;}
nlogn解法
#include <bits/stdc++.h>using namespace std;int dp[100010];int arr[100010];int binary_find(int l,int r,int key) ///二分 查找 >=key 的第一个位置 { int mid; while(l<r) { mid = (l+r)/2; if(key >= dp[mid]) ///关键值大于序列中间值 右半边查找 { l = mid + 1; } else { r = mid - 1; } } return r;}int main(){ int n,i,j,len; while(cin>>n) { len = 1; for(i=1; i<=n; i++) { cin>>arr[i]; } dp[1] = arr[1]; ///lis nlogn int pos; for(i=2; i<=n; i++) { if(arr[i] > dp[len]) { dp[++len] = arr[i]; } else { pos = binary_find(1,len,arr[i]); //cout<<arr[i]<<' '<<pos<<endl; dp[pos] = arr[i]; } } cout<<len<<endl; } return 0;}
最长公共子串
待更新
数字三角形
待更新
1 0
- 最长上升子序列 最长公共子序列 最长公共子串 数字三角形 等简单DP以及变形
- hdu4512(最长上升公共子序列变形)
- 最长公共子序列、上升子序列、最长上升子序列、最长公共子串
- 最长公共上升子序列
- 最长公共上升子序列
- 最长上升公共子序列
- 最长公共上升子序列
- 最长公共上升子序列
- 最长公共上升子序列
- 最长公共上升子序列
- 最长公共上升子序列
- 最长公共上升子序列
- 最长公共上升子序列
- 最长公共子上升序列
- 最长公共上升子序列
- 最长公共上升子序列
- 最长公共上升子序列 (dp)
- [DP]最长公共上升子序列LCIS
- linux学习
- VR系列——Oculus Audio sdk文档:四、传统Oculus声场定位技术的统一集成指南(4)——如何在Unity中使用Oculus声场定位技术
- Ext的日历选择控件星期几全部变为"y"了
- android 开源框架之——下拉刷新,上拉加载更多总结
- JSON.stringify 详细用法
- 最长上升子序列 最长公共子序列 最长公共子串 数字三角形 等简单DP以及变形
- Maven学习 (五) Elipse中发布一个Maven项目到Tomcat
- 随机游走模型(Random Surfer Model)
- wxLua实现的“每个字都是一朵花”小应用、双缓存动画、srLua及其他
- LaTeX学习笔记
- NodeJS学习笔记整理(三)读取文件与回调函数
- ListView的优化
- String a=new String("b"+"c")会创建几个对象?
- 线性卷积和循环卷积的比较与理解