随笔分类 -  6.02.0 线性DP

摘要:线性DP 本题的阶段很明显,就是完成了几个请求,但是信息不足以转移,我们还需要存储三个服务员的位置,但是三个人都存的话会T,我们发现在阶段 i 处,一定有一个服务员在 p[i] 处,所以我们可以只存另外两个人的位置,而且本题要滚动数组,采用刷表法比较好 cpp include include inc 阅读全文
posted @ 2018-03-16 16:09 Mr_Wolfram 阅读(298) 评论(0) 推荐(1)
摘要:DP优化经典 设 dp[i][j] 表示以 b[j] 结尾的 a[i] 以前的 LCIS 的长度 cpp include include include include include define inf 0x3f3f3f3f using namespace std; const int MAXN 阅读全文
posted @ 2018-03-16 11:49 Mr_Wolfram 阅读(222) 评论(0) 推荐(1)
摘要:线性DP 本题的正解是杨氏矩阵与钩子定理 但是这道题用DP的思想非常好 但是这样会MLE... cpp include include include include include using namespace std; unsigned int dp[31][31][31][31][31], 阅读全文
posted @ 2018-03-16 10:07 Mr_Wolfram 阅读(212) 评论(0) 推荐(0)
摘要:首先此一眼就能看出来是一个非常基础的 最长不下降子序列(LIS) ,其朴素的 N^2做法很简单,但如何将其优化成为N logN? 我们不妨换一个思路,维护一个f数组,f[x]表示长度为x的LIS的最大的最后一个数字是f[x]。(为什么是最大的?可以应用 贪心 的思想,发现对于相同的x,f[x]越大其 阅读全文
posted @ 2017-11-20 21:34 Mr_Wolfram 阅读(257) 评论(0) 推荐(0)
摘要:可以发现只有当两个序列中都没有重复元素时(1~n的排列)此种优化才是高效的,不然可能很不稳定。 求a[] 与b[]中的LCS 通过记录lis[i]表示a[i]在b[]中的位置,将LCS问题转化为最长上升子序列问题,转化方法如下: for(int i=1;i include include inclu 阅读全文
posted @ 2017-11-20 21:31 Mr_Wolfram 阅读(326) 评论(1) 推荐(1)
摘要:DP 题目问的是最大空暇时间,那么就定义dp[i]为第i分钟的最大空暇时间,显然满足最优子结构,我们发现dp[i]仅与其后的值有关,那么从后往前推,如果第i分钟没有任务,dp[i]=dp[i+1],如果有任务,就遍历所有任务 dp[i]=max{dp[i+task[j]]} 即本问题可以看成分组背包 阅读全文
posted @ 2017-11-20 21:29 Mr_Wolfram 阅读(153) 评论(0) 推荐(0)
摘要:首先有序化垃圾被丢入的时间,然后用背包的解法, 一维数组f[high]=life 表示在垃圾堆high高度的时候,奶牛可以存活life的时间 对于每件物品,循环从d~0 如果这个高度的生命值不小于这个垃圾丢下来的时间 如果 高度+这个垃圾的高度不小于d,就输出这个垃圾丢下来的时间 不然 这个高度+这 阅读全文
posted @ 2017-11-20 10:43 Mr_Wolfram 阅读(275) 评论(0) 推荐(0)