动态规划DP
cnyali_szsh348
这个作者很懒,什么都没留下…
展开
-
十字合并(DP)2018-08-10
一道经典的题:https://www.luogu.org/problemnew/show/P1090 这道题虽然比普通的要多考虑一点,因为有环形,但我们仍然可以通过非环形的例子来做一下,再来做这道题。 分析:这道题如果用贪心的思路当然也可以,只需要每次都选择最小的两个数相加就可以了,这里就不附上代码了QAQ 非环形代码:这里需要做一个预处理,也就是计算一个前缀和,然后DP一下,当前如果是合并...原创 2018-08-10 21:14:40 · 227 阅读 · 0 评论 -
线性DP2018-08-06
线性DP就是在DP的基础上可以画一颗树,更好理解。 一道例题:http://172.45.253.16:8080/problem/8 第一种方法:最朴素的暴力算法,先算出所有的子序列,看符合条件的数列,再统计其中的最大值,显然,这种方法很容易超时。 第二种方法:直接暴搜 第三种方法:线性DP,先设所有为1,数列里面的每一个数都向前看,发现比自己小的就转换,这样就很容易得出转移方程f[i]=...原创 2018-08-06 21:51:34 · 187 阅读 · 0 评论 -
动态规划2018-08-05
今天讲了DP(dynamic programming),不同与贪心,贪心只顾及了当前的最优解,而没有顾及到全局,往往会WA某些点,而DP是考虑全局,把所有状态都考虑到了。 DP分为状态,决策三部分,阶段是指DP的层次,而状态是指当前的各个变量,决策就是指最优的策略。 题目(自编):逃离恶魔塔 题目描述:小A有m滴血,现在他要逃离恶魔塔(呈三角形),已知第i层有i个关卡,每个关卡都有...原创 2018-08-05 20:28:22 · 115 阅读 · 0 评论 -
DP入门——2019-7-13
引入:先从一道简单的小奥题开始(然而我并不会)已知一个n行m列的表格,求从左上角至右上角总共的方案数,只能往右或下走。可以很轻松地得出,状态转移方程为f[i][j]=f[i-1][j]+f[i][j-1]代码:#include <iostream>#include <cstdio>#include <cstring>using namespace ...原创 2019-07-13 20:08:44 · 104 阅读 · 0 评论 -
DP——2019
233源代码:#include <iostream>#include <cstdio>#include <cstring>#include <cmath>using namespace std;const int maxn=1000+10;int n,ans;int a[maxn][maxn];int main(){ scanf...原创 2019-08-01 18:39:27 · 791 阅读 · 0 评论 -
树形DP入门2019-08-12
【题意】公司有n个人,每个人有价值vi,有一天举办年会,每个人都可以参加,但有严格的等级制度,参加活动时,不能同时出现a和a的上司,问如何才能使总和最大。【分析】每个人只有去和不去两种状态,设f[i][0]和f[i][1]分别表示第i个人不参加和参加年会,获得的总的最大价值。则状态转移方程为:f[i][1] += f[j][0],f[i][0] += max{f[j][0],f[j][...原创 2019-08-12 15:32:26 · 109 阅读 · 0 评论