|Vijos|动态规划|P1264 神秘的咒语

原创 2016年08月29日 16:53:12

https://vijos.org/p/1264

LCIS,也就是最长上升公共子序列

用dp[I][j]表示a[1..i]和b[1..j]的最长上升公共子序列,并以b[j]结尾

dp[I][j] = max(dp[I-1][j], max(dp[I-1][k]+1 | k<j && b[k]<a[I] && a[I]==b[j]))

不理解的强烈建议自己模拟一次样例

1
5 1 4 2 5 -12
4 -12 1 2 4




k可以在枚举i,j时候顺便求出,至于为什么自己模拟一遍就会发现,比我告诉你更好。

因此算法复杂度为O(n^2)
#include<iostream>
#include<cstdio>  
#include<cstring>   
#include<algorithm> 
#define ms(i,j) memset(i, j, sizeof(i)); 
using namespace std;
int a[505],b[505];
int f[505];
int m1, m2;
int main()  
{
	int t;
	scanf("%d", &t);
	while (t--)
	{
		scanf("%d", &m1);
		for (int i=1;i<=m1;i++)
		{
			scanf("%d", &a[i]);
		}	
		scanf("%d", &m2);
		for (int i=1;i<=m2;i++)
		{
			scanf("%d", &b[i]);
		}	
		ms(f,0);
		int ans = 0;
		for (int i=1;i<=m1;i++)
		{
			int k = 0;
			for (int j=1;j<=m2;j++)
			{
				if (a[i]==b[j])
				{
					f[j] = max(f[j], f[k]+1);
					ans = max(ans, f[j]);
				}
				else
				{
					if (a[i]>b[j])//a序列的i元素一定要大于b数组的j元素,因为是上升子序列 
					{
						if (f[k]<f[j])
						k = j;
					}
				}
			}
		}
		printf("%d\n", ans);
	}
    return 0;  
}  


版权声明:博客停更,请到"再见,CSDN"文章中找新博客地址

相关文章推荐

|Tyvj|动态规划|P1071 LCIS

http://tyvj.cn/p/1071 LCIS经典问题,具体看这个 http://blog.csdn.net/Darost/article/details/52354660 #incl...

再见,CSDN!

博客合并到了 http://flyinthesky.win/ 新博客不迁移luogu/tyvj/vijos的题目,这个博客将无限期停止更新再见,CSDN!

Vijos P1354 Hanoi双塔问题(动态规划,高精度)

貌似算不上动规,主要是高精

Vijos P1104 采药 动态规划

描述 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这...

【动态规划】【归并】Vijos P1412 多人背包

题目链接:   https://vijos.org/p/1412 题目大意:   求01背包的前K优解,要求必须装满(1 题目思路:   【动态规划】   f[j][k]表示花费为j的第k优解。一开始...

Vijos P1153 猫狗大战(动态规划,背包)

因为只要用到一半的人数,所以状态数组可以开到人数的一半,前i个人中是否有j个人能组成血格数k可以用f[i][j][k]表示,不过为了优化,之前计算的结果可以不用保存,这样只用f[j][k]的二维数组就...

【动态规划】Vijos P1313 金明的预算方案(NOIP提高组2006第二题)

题目链接:   https://vijos.org/p/1313 题目大意:   m(m 题目思路:   【动态规划】   01背包。因为至多2个附件,且附件没有附件,所以可以直接枚举4种情况。   ...

[20] Vijos P1737 选择客栈(动态规划,方案数)

很容易想到DP,但实现起来还是不太熟练

Vijos P1485 传球游戏(动态规划)

n个人组成环状传球,注意第一人和最后一人的不同

【动态规划】Vijos P1680 距离

题目链接:   https://vijos.org/p/1680 题目大意:   设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为”abcbcd”,则字符...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)