随笔分类 - DP--基础DP
摘要:之前学了dp没有好好看一遍背包九讲,今天把背包九讲过一遍,供之后自己看方便一些。 一. 01背包 题目链接:https://www.acwing.com/problem/content/2/ n,V<=1000 这个没什么好说的,加滚动数组,复杂度O(nV),代码如下: #include<cstdi
        阅读全文
                
摘要:题目链接:https://vjudge.net/problem/POJ-1836 题意:给定n个数组成的序列,求最少减掉几个人,使得序列先单调递增再单调递减。 思路:枚举i:1..n,以i为边界,左边递增,右边递减,两次LIS即可,用O(nlogn)的做法,求结果最小即可。总时间复杂度O(n^2lo
        阅读全文
                
摘要:题目链接:https://ac.nowcoder.com/acm/contest/882/E 题意:n×m的矩阵,0表示可以走,1表示墙,不能通过。有q中操作,一种是改变坐标(x,y)的状态,一种是询问从(1,x)到(n,y)有多少条路径。(n,q<=5e4,m<=10)。 思路:dp、矩阵乘加线段
        阅读全文
                
摘要:链接:http://poj.org/problem?id=1050 题意:给定n*n的矩阵,求和最大的子矩阵。 思路:我们将二维矩阵降维至一维,即将第i行到第j行的所有列压缩成一行,我们可以在线性时间求出一位的最大子段和。详见代码,复杂度O(n^3)。 AC代码:
        阅读全文
                
摘要:题目链接:https://ac.nowcoder.com/acm/contest/881/E 题意:求可分解成n个AB和m个BA的字符串的个数。 思路: 首先根据贪心思想,前n个A可作为AB的A,后m个A作为BA的A。可以证明,如果将前n个A中的一个作为BA的A,那一定可以从后面找到一个A来替代这个
        阅读全文
                
摘要:题目链接:https://www.luogu.org/problemnew/show/P2822 题意:输入T和k,有T组询问。每组询问输入n、m,求C(i,j)能模k的个数(0<=i<=n,0<=j<=min(i,m))。 思路:首先需要离线操作,因为n<=2000,我们可以把所有可能的n,m的结
        阅读全文
                
摘要:题目链接:http://poj.org/problem?id=2385 题意:最开始Bessie站在树1下面,每一个单位时间有颗苹果从树1或者树2上落下来。每个单位时间Bessie可以移动一次位置,时间长度为T(<=1000),Bessie最多移动W次(<=30)。求Bessie最多能得到多少苹果。
        阅读全文
                
摘要:题目链接:https://nanti.jisuanke.com/t/39271 题意:给定n个物品,m组限制,每个物品有个伤害值,现在让两个人取完所有物品,要使得两个人取得物品伤害值之和最接近,输出伤害值不小于另一个的人的伤害值,每组限制包括两次数x y,表示物品x和物品y不能由同一个人取得。 思路
        阅读全文
                
摘要:题目链接:https://vjudge.net/problem/POJ-2479 题意:给出n个数组成的序列,求将序列分成前后两部分时两部分最大连续子串的和的和的最大值。 思路:题意很简单,用dp1[i]表示以i为结尾的最大连续子串的和,dp2[i]表示以i为起始的最大连续子串的和,从1到n遍历计算
        阅读全文
                
摘要:题目链接:https://codeforces.com/contest/1155/problem/D 题意:给定n个数,可以选择一段连续子段将其乘x,也可以不操作,求最大连续子段和。 思路:比赛时觉得是dp,但怎么也想不出来QAQ,dp太难了。。。赛后看了别人题解,找到状态和转移方程就很简单了,然而
        阅读全文
                
摘要:题目链接:https://codeforces.com/contest/1153/problem/D 题意:有一棵树,给定结点数n,在每个结点上的操作(max:表示该结点的number为其孩子结点中的最大值,min相反),结点2..n的父结点。叶子结点上定义的操作可忽略,叶子结点的number为1.
        阅读全文
                
摘要:题目链接:https://ac.nowcoder.com/acm/contest/553/G 题意:给定n,k,(1<=n<=5e5)然后给出n个数ai(1<=ai<=1e5),问按顺序从1..n分组,最多能有多少个组的异或和为k。 思路:自然的,我们用dp[i]表示到第i个人的时候最多有多少个组的
        阅读全文
                
摘要:题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805054207279104 题意:给定n枚硬币的面值,需要支付金额m,求能否恰好支付,若能,输出最小序列,若不能输出No Solution 思路:很容易看出这是一
        阅读全文
                
摘要:题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805046946938880 题意:给定一个长度<=106的字符串,求至多删3个字符可以得到多少种不同的字符串。 思路:很明显这是一道dp题,但我想了好久也想不出来
        阅读全文
                
摘要:题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805063166312448 题意:给定n个数的重排列,求至少需要多少轨道,使最终的排列按降序排列。 思路:这道题和hdoj1257是类似的,http://acm.
        阅读全文
                
摘要:题目链接:http://poj.org/problem;jsessionid=8C1721AF1C7E94E125535692CDB6216C?id=1417 题意:有p1个天使,p2个恶魔,天使只说真话,恶魔只说假话。问n句话,问x:y是否为天使,x回答yes或no,分别表示是或否,问能否确认为天
        阅读全文
                
摘要:题目链接:http://poj.org/problem?id=3666 思路: 看了讨论区说本题的数据比较弱,只需要考虑不减序列即可,比较懒,所以我也只写了这一部分的代码,思路都一样,能AC就行了。 首先要想明白一点,就是将每一个elevation更新后的值一定是原来存在的,因为更新一个elevat
        阅读全文
                
摘要:题目链接:http://poj.org/problem?id=3616 思路: 我的第一反应是背包,因为每个interval要么选择要么不选,后来发现状态方程很难写出来。后来想一想发现就是LIS的简单变式。先按照starting hours给数据排序,那么选择的顺序也就是排序后的顺序,用dp[i]表
        阅读全文
                
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2859 思路: 第一次碰到这种矩阵上的DP题,想了半天也没想明白。本来想用子矩阵的左上角坐标和右下角坐标当作状态,但这样内存肯定是不够的。后来网上查了就明白了。 用dp[i][j]表示以(i,j)为左下角
        阅读全文
                
摘要:题目链接:http://poj.org/problem?id=1661 思路: 把初始位置看成左,右端点均为x0,即长度为0,高度为y0的一个平台,按照平台高度从低到高排序。用dp[i][0],dp[i][1]分别表示从第i个平台的左端,右端到地面的最短时间。tmp=get_next(i,0)表示第
        阅读全文
                
 
                    
                
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号