题目:最大上升子序列,输出一组解。
分析:dp,LIS。数据较小 O(n^2)算法即可。
设以第i个数字作为最大上升子序列中的最后一个数的长度为 f(i),则有转移方程:
f(i)= max(f(j)) { 0=
用一个数组记录前驱,递归输出即可。
说明:注意输出格式有点纠结。
#include
#include
...
分类:
其他好文 时间:
2014-08-24 23:55:53
阅读次数:
417
其实就是最长上升子序列。只要把普通的LIS中的“>”改为另外一种这里需要的判断的方式即可。dp[i]表示包含i在内的从1到i的LIS 状态方程, dp[i] = max(dp[i],dp[j]+1)(if(“i>j”));边界dp[i] = 1;最后还需要扫一遍dp[]取出其中的最大值,(为什么d....
分类:
其他好文 时间:
2014-08-24 23:28:53
阅读次数:
270
题目: UVA - 10599Robots(II)(LIS)
题目大意:一个N * M 的矩阵,上面有些格子上有垃圾,现在要求一个机器人从1,1的格子出发,往右或是往下走最终到达N * M各格子,沿途要收集最多的垃圾。现在将垃圾编号,要求输出最多能清理的垃圾并且输出这样的清理路线有多少条,输出其中字典序最小的那一条。
解题思路:一开始还以为是简单的dp,结果输出发现路径多了好多...
分类:
其他好文 时间:
2014-08-22 13:03:18
阅读次数:
211
题目:UVA - 111History Grading(LIS)
题目大意:找最长的LIS。但是题意讲的实在是有问题。
例如:3 1 2 4 9 5 10 6 8 7,意思是第一个历史事件的时间是排在第三位,第二个历史事件是在第1位,那么首先先要将这个事件按照时间顺序重新排序。新的排列顺序:2 3 1 4 6 8 10 9 5 7。
解题思路:LIS.
代码...
分类:
其他好文 时间:
2014-08-22 13:02:08
阅读次数:
236
题目:UVA - 531Compromise(LIS)
题目大意:给出两段话,找出里面最长的公共单词的子序列。并且输出任意一个子序列。
解题思路:LIS。
代码:
#include
#include
const int N = 105;
const int M = 35;
char w1[N][M];
char w2[N][M];
int f[N][N]...
分类:
其他好文 时间:
2014-08-22 13:00:28
阅读次数:
195
题意:给n种立体块,每种有无限个,上面的块长宽必须小于下面的块,问最多可以搭建多高
思路:输入的时候小小处理下,把每个块各条边当高的情况存入结构体中,按升序排序,然后dp,比较求出最大值。。看好多代码都说什么最长上升子序列,感觉没有用到额,LIS的标记数组是用来存储相应长度的最小值的,没看出来哪里用上了额。。。数据范围小,直接就是dp了=。=
#include
#include
#...
分类:
其他好文 时间:
2014-08-20 22:47:03
阅读次数:
253
解法一:通过遍历得到(0:i)的LIS,时间复杂度O(N^2);具体思路于代码,如下: 1 #include 2 #include 3 using namespace std; 4 5 int longSub(int arr[],int n); 6 7 int main() 8 { 9 ...
分类:
其他好文 时间:
2014-08-20 15:44:12
阅读次数:
147
发现这个说的比较通俗:假设存在一个序列d[1..9] = 2 1 5 3 6 4 8 9 7,可以看出来它的LIS长度为5。下面一步一步试着找出它。我们定义一个序列B,然后令 i = 1 to 9 逐个考察这个序列。此外,我们用一个变量Len来记录现在最长算到多少了首先,把d[1]有序地放到B里,令...
分类:
其他好文 时间:
2014-08-15 20:50:19
阅读次数:
364
POJ 3671
题意:要使序列形成非递减的序列,最少改变几个数;
思路:ans=n-lis();
#include
#include
#include
#include
#include
#include
using namespace std;
int n;
int cow[30010];
vector len; //len[k]=t,表示k长度的序列的最小...
分类:
其他好文 时间:
2014-08-15 17:59:59
阅读次数:
215
本题是LIS题解。主要是理解他的题意。他的题意都好像比较隐晦,比如每个poor city和rich city一定是需要对应起来的,比如poor city和rich city并不是按顺序给出的。
其实是可以把数列按照poor city排序,然后求rich city城市号的最大递增子序列。
不过这里不用排序,利用hash的思想直接对应起来就可以了。
然后就是本题是卡DP的O(n*n)的解法的,这...
分类:
其他好文 时间:
2014-08-15 17:55:49
阅读次数:
211