[tyvj-1071]LCIS 动态规划】的更多相关文章

题目描述 熊大妈的奶牛在小沐沐的熏陶下开始研究信息题目.小沐沐先让奶牛研究了最长上升子序列,再让他们研究了最长公共子序列,现在又让他们要研究最长公共上升子序列了. 小沐沐说,对于两个串A,B,如果它们都包含一段位置不一定连续的数字,且数字是严格递增的,那么称这一段数字是两个串的公共上升子串,而所有的公共上升子串中最长的就是最长公共上升子串了. 奶牛半懂不懂,小沐沐要你来告诉奶牛什么是最长公共上升子串.不过,只要告诉奶牛它的长度就可以了. 输入格式 第一行N,表示A,B的长度. 第二行,串A. 第…
  Virus  We have a log file, which is a sequence of recorded events. Naturally, the timestamps are strictly increasing. However, it is infected by a virus, so random records are inserted (but the order of original events is preserved). The backup log…
题目链接 Solution 动态规划. 令 \(f_{i,j}\) 表示 \(a\) 数组前 \(i\) 个和 \(b\) 数组前 \(j\) 所得的最长的 LCIS . 转移很好想: \(a_i!=b_j :~f_{i,j}=f_{i-1,j}\) \(a_i==b_j :~f_{i,j}=max(f_{i-1,j},f_{i,t(存储位置)}+1)\) 然后最后面 \(f[n][i]\) 中的最大值即为答案. Code #include<bits/stdc++.h> int n,a[502…
D. LCIS 题目连接: http://www.codeforces.com/contest/10/problem/D Description This problem differs from one which was on the online contest. The sequence a1, a2, ..., an is called increasing, if ai < ai + 1 for i < n. The sequence s1, s2, ..., sk is call…
拖了好久的LCIS f[i][j]表示a串前i个,b串以b[j]结尾的LCIS长度. 转移时考虑a[i]和b[j]是否相等,如果不等: 那么既然是以j结尾,说明a串前i-1位有一个字符和b匹配了,所以由f[i-1][j]转移来(i-1涵盖所有方案) 如果相等,那么考虑由什么转移来 f[i-1][k]是一个前驱状态,既然a[i]匹配了,就只能考虑前i-1位了,由于定义如此,所以可以“笼统地”从f[i-1][]转移来,第二维就得枚举j前面的k,且b[k]<b[j],满足递增性质 这样做是O(n^3)…
LCIS模板 #include <cstdio> #include <cstring> #include <iostream> using namespace std; int n; long long a[3005],b[3005],f[3005]; int main() { scanf("%d",&n); for(int i=1; i<=n; i++) scanf("%lld",&a[i]); for(i…
CJOJ 1071 [Uva]硬币问题(动态规划) Description 有n种硬币,面值分别为v1, v2, ..., vn,每种都有无限多.给定非负整数S,可以选用多少个硬币,使得面值之和恰好为S?输出硬币数目的最小值和最大值. Input 第一行两个整数,n,S(1≤n≤100, 0≤S≤100000). 第二行n个整数vi-1...n(1≤vi≤S). Output 第一行两个整数,分别表示硬币数目的最小值 a 和最大值 b .无解则输出 -1 . 第二行 a 个整数分别表示使用的是第…
题目:http://tyvj.cn/p/3119 P3119 核电站问题 时间: 1000ms / 空间: 65536KiB / Java类名: Main 描述 一个核电站有N个放核物质的坑,坑排列在一条直线上.如果连续M个坑中放入核物质,则会发生爆炸,于是,在某些坑中可能不放核物质.  任务:对于给定的N和M,求不发生爆炸的放置核物质的方案总数 输入格式 输入文件只一行,两个正整数N,M( 1 输出格式 输出文件只有一个正整数S,表示方案总数. 测试样例1 输入 4 3 输出 13 题解: 动…
问题 给定两个序列A和B,序列的子序列是指按照索引逐渐增加的顺序,从原序列中取出若干个数形成的一个子集,若子序列的数值大小是逐渐递增的则为上升子序列,若A和B取出的两个子序列A1和B1是相同的,则A1/B1为A和B的公共子序列.求出A和B的最长公共上升子序列. 分析     结合最长公共子序列和最长上升子序列来解决这个问题,定义状态dp[i][j]表示A串中前i个字符和B串中前j个字符且以B[j]为结尾的最长公共上升子序列的长度.则有状态转移方程:[在进行动态规划状态的设计的时候,要简单.详尽的…
先给出状态转移方程: 定义状态 F[i][j]表示以a串的前i个整数与b串的前j个整数且以b[j]为结尾构成的LCIS的长度 状态转移方程: ①F[i][j] = F[i-][j] (a[i] != b[j]) ②F[i][j] = max(F[i-][k]+) ( <= k <= j- && b[j] > b[k]) 这个可以优化到O(n^2)的时间复杂度,然后再滚动数组一下,空间复杂度就可以是O(n)的,这里直接给出最优实现策略 #include<cstdio&…