SSL2812 2017年10月30日提高组T2 凤凰院凶真(dp,LCIS)
2017-10-30 19:41
323 查看
2017年10月30日提高组T2 凤凰院凶真
DescriptionInput
Output
第一行一个整数k,表示最长公共合法事件序列的长度。
Sample Input
5
1 4 2 5 1
4
1 1 2 4
Sample Output
2
Hint
【数据规模和约定】
分析:考虑 DP. 设状态 dp(i, j) 表示 a 序列考虑到 i, b 序列考虑到 j 并且必须选 bj 的最大长度. 当 ai = bj 时, 显然有转移 dp(i, j) = max {dp(i − 1, k)} + 1(k< j,bk< bj ). 于是从小到大枚举 j, 维护 max{dp(i − 1, k)}(k< j,bk< ai), 顺便记录一下最大值的位置,直接转移即可.
#include <cstdio> #define maxn 6000 using namespace std; int f[maxn],a[maxn],b[maxn]; int n,m; int max(int x,int y) { return x>y?x:y; } int main() { scanf("%d",&n); for (int i=1;i<=n;i++) scanf("%d",&a[i]); scanf("%d",&m); for (int i=1;i<=m;i++) scanf("%d",&b[i]); for (int i=1;i<=n;i++) { int p=0; for (int j=1;j<=m;j++) if (a[i]==b[j]) f[j]=max(f[j],f[p]+1); else if (a[i]>b[j]&&f[j]>f[p]) p=j; } int ans=0; for (int i=1;i<=m;i++) if (f[i]>ans) ans=f[i]; printf("%d",ans);
相关文章推荐
- SSL2843 2017年11月8日提高组T2 拆网线(树形dp)
- 【SSLGZ 2812】2017年10月30日提高组T2 凤凰院真凶
- SSL2674 2017年8月9日提高组T2 覆盖(dp)
- SSL2810 2017年10月30日提高组T2 数论(math)
- SSL2759 2017年10月6日提高组T2 挖矿(dp)
- 【SSLGZ 2794】2017年10月26日提高组T2 Dark(dp)
- 【SSLGZ 2810】2017年10月30日提高组T2 数论
- SSL2834 2017年11月4日提高组T2 背包(二分)
- 【NOIP 2010 提高组 T2】乌龟棋(DP)
- SSL2792 2017年10月25日提高组T2 数字问题(数位dp)
- SSL2835 2017年11月4日提高组T2 字典序(堆+拓扑序)
- SSL2703 2017年8月16日提高组T2 疾病(dfs)
- SSL2841 2017年11月7日提高组T2 好路线(dp)
- [DP] ZROI 2017提高1 T2.给 Ca
- SSL2706 2017年8月17日提高组T2 考试(贪心)
- 【SSLGZ 2811】2017年10月30日提高组T2 摘Galo
- SSL2845 2017年11月8日提高组T2 序列操作(贪心,树状数组,差分)
- [DP] ZROI 2017提高 5 T2. 石头剪刀布
- SSL2688 2017年8月14日提高组T2 温度
- SSl2794 2017年10月26日提高组T2 Dark(dp)