
dp
tuochuan
这个作者很懒,什么都没留下…
展开
-
一本通 1266
总公司拥有高效设备M台,准备分给下属的N个分公司。各分公司若获得这些设备,可以为国家提供一定的盈利。问:如何分配这M台设备才能使国家得到的盈利最大?其中M≤15,N≤10。分配原则:每个公司有权获得任意数目的设备,但总台数不超过设备数M。虽然是水题,恰巧写一下这种类似背包输出具体方案的。原创 2022-10-26 21:26:34 · 201 阅读 · 0 评论 -
牛客 股票买卖的最佳时机
已知每支股票的价格序列 a , 进行若干次买卖( 一次买卖的收益a[j] - a[i] ) 求最大收益。原创 2022-10-26 10:59:03 · 86 阅读 · 0 评论 -
luogu 2344
给一个序列划分为若干组,每组的和 S>=0, 问方案数。原创 2022-10-23 23:42:44 · 72 阅读 · 0 评论 -
luogu 3004
硬币序列最左侧或者最右侧的硬币,并将他从序列中取出,将其价值累加到自己获得的累计价值中,然后进行另一个人的回合。当硬币全部被取走时,游戏结束。请求出在双方都尽可能的使自己累计价值最大的情况下,若由小 A 进行第一回合,那么他能获得的累计价值最大是多少。初始时,有 nn 个硬币被摆成了一行,从左至右数第 ii 个硬币的价值为 c_ici。小 A 和小 B 每人一回合,在一个人的回合中,他可以选择。小 A 和小 B 在玩游戏。原创 2022-10-23 20:11:48 · 562 阅读 · 0 评论 -
luogu 2592
f[i][j][k][l] 目前i个男生,j个女生,个数差值为 k 和 l。n个男生,m个女生排成一排,要求任意子段 中男女生的个数差原创 2022-10-23 17:26:28 · 76 阅读 · 0 评论 -
luogu 1336
【代码】luogu 1336。原创 2022-10-23 14:20:28 · 76 阅读 · 0 评论 -
luogu 4909
缆线也是一条折线,由若干段缆绳组成,起点在山脉的第一个端点,终点在最后一个端点。每段缆绳可以贴着山脉的轮廓,也可以悬浮于空中,跳过山脉上几个海拔低的端点。每段缆绳的水平跨度有限制,不能超过给定的整数 L。罗恩需要在每段缆绳的端点处修建支柱,用来固定缆绳。这条折线由 NN 个端点,N−1N−1 段线段组成,第 ii 个端点的横坐标就是 ii,纵坐标是 H_iHi,纵坐标代表高度,也可以称为海拔。请帮助他规划一下,选择在山脉的哪些端点上修建,才能使得支柱数量最少?注意,根据题意,起点和终点上是一定要修建的。原创 2022-10-23 13:32:36 · 59 阅读 · 0 评论 -
luogu 4084
【代码】luogu 4084。原创 2022-10-23 11:40:44 · 75 阅读 · 0 评论 -
luogu 1156
算答案的时候, 应该 在 任意 f[i][j] 里面找,(不是 f[n][j]) ,奶牛中途可能成功了。考虑前i个物品, 此时高度为j 时 ,最大的血量。物品顺序要按时间从小到大枚举。状态 f[i][j]原创 2022-10-23 10:52:20 · 93 阅读 · 0 评论 -
luogu 1282
在 sum{ a } -sum{ b } 最小的前提下,求出最小的答案。对每个i ,从 a[i] b[i] 选一个。若选择 a[i] ,不贡献答案;原创 2022-10-23 00:24:07 · 55 阅读 · 0 评论 -
luogu 2389
对序列{a} ,选择m个连续段,求总和最大。原创 2022-10-22 21:56:50 · 70 阅读 · 0 评论 -
luogu 2854
n条线段( 起点,终点,价值,费用) ,选择一些来覆盖 [0,L],注意所选线段不能相交。状态第一维放当前的位置(如果放线段编号,emmm好像没法做。背包题,而且背包体积要刚好用完。原创 2022-10-22 16:55:40 · 145 阅读 · 0 评论 -
luogu 1280
对于某个区间起点,状态转移到终点,要反过来枚举 i。原创 2022-10-22 13:57:17 · 88 阅读 · 0 评论 -
luogu 2426
【代码】luogu 2426。原创 2022-10-22 12:12:01 · 97 阅读 · 0 评论 -
luogu 5020
现在网友们打算简化一下货币系统。他们希望找到一个货币系统 (m,b)(m,b),满足 (m,b)(m,b) 与原来的货币系统 (n,a)(n,a) 等价,且 m 尽可能的小。他们希望你来协助完成这个艰巨的任务:找到最小的 m。两个货币系统 (n,a)(n,a) 和 (m,b)(m,b) 是等价的,当且仅当对于任意非负整数 xx,它要么均可以被两个货币系统表出,要么不能被其中任何一个表出。据猜测和观察样例,应该是看对于任意 a[i] 是否可以被其他货币表示出来。原创 2022-10-21 21:37:02 · 91 阅读 · 0 评论 -
luogu 1107
k的枚举的目的是 找 f[k][height] 最大,可以维护一下,然后直接用。重点来了,可以去掉 k 的枚举。暴力程序 O(n^3)原创 2022-10-21 20:42:18 · 69 阅读 · 0 评论 -
luogu 2513 逆序对数列
下列3个数列逆序对数都为1, 1 2 4 3;f[i][j] = sum{ f[i-1][j-k] } ,k 即我们枚举的贡献。f[i][j] 表示 1~i 的整数组成排列, 逆序对数为 j ,的排列个数。我们在 1~i-1 的某个排列中插入i ,可能贡献 0~i-1 个逆序对。对于1~n的整数组成的的排列,其中逆序对数为K的排列有几种。复杂度O(n* k^2) ,比如n=4,K=1时。原创 2022-10-21 14:46:57 · 452 阅读 · 0 评论 -
cf543A
n个物品,每种物品有无限个,物品体积,现在一共取m个物品,且物品总体积不超V。纯粹的背包,没什么说的。原创 2022-10-20 20:08:51 · 117 阅读 · 0 评论 -
SP283 NAPTIME-Naptime
/ f[1][0][0]=0, f[1][1][1]=a[1] 选择,那么 1 算价值。// f[1][0][0]=f[1][1][1]=0 选择n, 那么 1 不算价值。f[i][j][0/1] ,j 是目前选择了的点的个数, 0/1 当前点i 是否选择。环上的dp要注意可能出现 [n-1,3] 这种情况 ,其中的3是下一轮的3。一个环上有n个点,价值 a[i],现在要选择m个点,其中连续段的第一个元素的价值不算,求总和最大?我们枚举 n 的状态,即 元素n是否选择。两种状态对应dp的边界设置。原创 2022-10-20 16:55:57 · 441 阅读 · 0 评论 -
luogu 1351
求 a[y1]*(a[y2]+a[y3]+ ... +a[yn]) + a[y2]*(a[y1]+a[y3]+...a[yn]) + .... +这个观察一下,很容易推出 answer= S^2- sum{a[i]^2} 其中S=sum{a[i] }原创 2022-10-19 21:58:44 · 88 阅读 · 0 评论 -
最长单调不增子序列
f[i] = max{ f[j] +1 } j原创 2022-10-19 19:34:35 · 237 阅读 · 0 评论 -
luogu 1586
给定的正整数n,统计它能分解的方案总数。注意:25=4^2+3^2 与 3^2+4^2 相同。四方定理是众所周知的:任意一个正整数n,可以分解为不超过四个整数的平方和。直接用背包会重复累加,此时要利用这个定理,f[4][j]背包,把每个平方数作为一个物品。原创 2022-10-19 16:30:50 · 80 阅读 · 0 评论 -
luogu 1077
考虑前 i 种物品,f[i][j] 表示方案个数, j 表示第i个物品取多少。一些不同类型的物品,每种物品有可取个数的上限( a[i] )从中挑m个,求方案个数。原创 2022-10-19 15:06:35 · 97 阅读 · 0 评论 -
luogu 1057
n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同学可以把球传给自己左右的两个同学中的一个(左右任意),当老师再次吹哨子时,传球停止,此时,拿着球没有传出去的那个同学就是败者,要给大家表演一个节目。易得 f[i][j] =f[i-1][j-1], f[i+1][j-1] (f[0][0]=1)有多少种不同的传球方法可以使得从小蛮手里开始传的球,传了m次以后,又回到小蛮手里?假设从0号位置开始 ,状态放连个东西: 当前位置和次数 , 求出对应的方案数。原创 2022-10-19 13:32:35 · 83 阅读 · 0 评论 -
cf414b
1~M 挑数字(可重复), 能组成多少长度为n的合法序列?合法序列: a[i] %a[i-1]==0。原创 2022-10-19 12:26:39 · 80 阅读 · 0 评论 -
luogu 1018
这时,符合题目要求的结果是: 31 *2。数字串分割为m个部分,求乘积最大?原创 2022-10-18 21:18:15 · 69 阅读 · 0 评论 -
luogu 1049
现在从 nn 个物品中,任取若干个装入箱内(也可以不取),使箱子的剩余空间最小。有一个箱子容量为 VV,同时有 nn 个物品,每个物品有一个体积。原创 2022-10-18 20:33:39 · 95 阅读 · 0 评论 -
状态压缩dp的两个经典问题
这里的图染色问题 : 用最少的颜色给一个无向图的点染色,且相邻节点颜色不同。f[s] = min{ f[s-s2]+1 } ,s2为s的子集。值得注意集合S 的子集如何枚举?原创 2022-10-18 18:49:24 · 64 阅读 · 0 评论 -
uva 1218
f[x][1]= sum{ f[y][2] } // x为白点,且father[x] 为黑点。白点只和一个黑点相连,所以对于节点x, 不仅考虑 x ,son[x] 的情况,还有 x,father[x]f[x][2] 需要枚举一个子节点 W 作为黑点,然后其他的的点为白,但这样做 复杂度O(n^2)这里就要注意利用已经算出来的 f[x][1]1:x为白点,且father[x] 为黑点。2:x 白点,father[x] 白点。// f[x][3] 黑点个数。原创 2022-10-18 16:35:38 · 125 阅读 · 0 评论 -
3个经典树上问题
答案= max{ max{ size(son[y] ) } , n-size(x) } , y是x的儿子。2. 树的重心(找一个点, 使得以该点作为根节点时, size(son(x)) 的最大值最小。记录 d1[x] , d2[x] ,x子树的最长路径最大值和次大值。任选一个点作为根,有了以下得状态。形状应该为两条路径集于一个根节点。同样任选一个点作为根。原创 2022-10-18 15:43:12 · 225 阅读 · 0 评论 -
uva 10003
【代码】uva 10003。原创 2022-10-18 15:08:12 · 83 阅读 · 0 评论 -
uva 1025
f[i][j] =min{ f[i+1][j+t[j-1]] } // 向左。f[i][j]= min{ f[i-1][j+t[j]] } //向右。f[i][j] 在 i 车站,当前经过的时间 j ,所需最小等待时间。原创 2022-10-18 14:18:56 · 91 阅读 · 0 评论 -
最大子段和
维护前缀和s[i] ,所求的最大和 为 max{ s[j] - s[i] } , i原创 2022-10-15 17:34:18 · 98 阅读 · 0 评论 -
cf#806G
【代码】cf#806G。原创 2022-10-13 17:02:14 · 89 阅读 · 0 评论 -
cf820G
操作:从字符串a中扣除给定的子串b(如hebheof 和 he ,结果 --bheof或heb--of。问直到无法操作时,至少需要几次。原创 2022-10-12 20:31:55 · 55 阅读 · 0 评论 -
cf815C
对于i>=2,使用di的条件为:xi的优惠券需要被使用,问初始金钱为b时 最多能买多少件商品?f[u][j][0/1] 表示某子树(u)有体积j(价格上限) ,该物品是否选择,所需要的最小金钱。有n件商品,每件有价格c[i],优惠券d[i],程序采用刷表法(填表法会超时,痛苦。原创 2022-10-10 17:54:18 · 95 阅读 · 0 评论 -
知识 树上背包
课程有依赖关系形成树状结构,每个节点有价值a[i], 若选择X节点 则必须选择其父节点,最多选m个节点。f[u][i][j] 结点u,可用体积为j(节点个数),考虑前i个子节点,能获得的最大价值。例子: luogu 我们枚举第i个点分配的体积k。原创 2022-10-10 16:31:58 · 67 阅读 · 0 评论 -
cf1060E
那么发现只需考虑dep[i]+dep[j]的奇偶性 ,即dep[i]与dep[j]奇偶性是否不同,然后这里要求有多少对(i,j). 那就统计dep为奇数和偶数的 点的个数 ,两者相乘。考虑一对(i,j),每一步一定贪心地走长度为2的边(然后最后一步可能要走长度为1的边。则 dist(i,j)= [dis/2] = dis/2+ (dis%2),1原创 2022-10-10 12:56:00 · 53 阅读 · 0 评论 -
cf1153D
n个节点以1为根的一棵树,每个非叶子节点都有一个操作max或min(0表示min,1表示max),表示这个节点中的值应该分别等于其子节点中所有值的最大值或最小值。假设树上有k个叶节点,你可以将每个叶节点填上[1,k]的数字,且每个数字只使用一次,求根节点的最大值。f[i] 存一个点能取到的叶子节点的最小排名。原创 2022-10-10 09:46:44 · 60 阅读 · 0 评论 -
cf791C
sum{dis(i,j)} dis(i,j) 为两点的最短跳跃次数,(每次可以跳k条边)原创 2022-10-09 22:47:53 · 56 阅读 · 0 评论