
基础DP
包含背包DP,递推DP等
wineandchord
这个作者很懒,什么都没留下…
展开
-
洛谷 P1002 过河卒 (二维DP)
#include<iostream>#include<cstdio>#include<algorithm>#define MAXN 35using namespace std;typedef unsigned long long ull;int a,b,c,d;ull f[MAXN][MAXN];int s[MAXN][MAXN];int dx[9]={0,-2,-1,1,2,2,1,-1,-2};int dy[9]={0,1,2,2,1,-1,-2.原创 2020-08-23 22:55:41 · 107 阅读 · 0 评论 -
洛谷 P2392 kkksc03考前临时抱佛脚 (01背包)
很有趣的一道 01 背包首先,每个科目单独进行考虑对于每个科目,理想情况应该是左右脑的时间尽可能相等相等时为 sum/2,看作 01 背包问题,背包的容量是 sum,物品是该科目内的题目,放置题目使得背包尽可能装满sum 减去背包的最大装载即为该科目需要花费的时间#include<iostream>#include<cstdio>#include<cstring>#define MAXN 25#define MAXM 5000using name原创 2020-08-23 21:44:33 · 179 阅读 · 0 评论 -
洛谷 P2340 [USACO03FALL]Cow Exhibition G(01背包)
每个牛可以拿或者不拿,所以是个01背包。双商为负的牛肯定不拿。用 f[i]f[i]f[i] 表示智商和为 iii 时对应的最高情商和,由于可能出现负数,所以统一移位。#include<iostream>#include<cstdio>#include<cstring>#define MAXN 800005#define MI 400000#define MX 800000#define INF 0x3f3f3f3fusing namespace std;原创 2020-07-10 14:34:30 · 205 阅读 · 0 评论 -
洛谷 P1941 飞扬的小鸟 完全背包+01背包
上升时看作一个完全背包,下降时看成一个01背包。#include<iostream>#include<cstdio>#include<cstring>#define MAXN 10010#define INF 0x3f3f3f3fusing namespace std;int n,m,k,x[MAXN],y[MAXN],low[MAXN],high[MAXN],a,b,c,e[MAXN],f[MAXN][MAXN];int main(){#ifdef W原创 2020-07-09 20:17:12 · 107 阅读 · 0 评论 -
洛谷 P1064 金明的预算方案 分组DP/有依赖DP
总共有 nnn 元,买 mmm 个物品,每个物品有重要度,并且其中一些物品是捆绑销售的hhh要使每件物品的价格乘上重要性的总和最大。思路:有依赖的背包问题,分为主件和附件,对于每个主件,可以选择:不选择主件只选择主件选择主件,然后再选择附件的一种组合流程大概如下:首先遍历所有主件,先考虑选择该主件时以及 0 到多个附件时的每个价格的最优解(01 DP)然后再将这些价位与不选择该主件时的情况取最优解详见代码及注释#include<iostream>#include<原创 2020-06-19 15:48:54 · 154 阅读 · 0 评论 -
洛谷 P3842 [TJOI2007]线段 DP
给一个 n×nn\times nn×n 的平面,每一行有一个线段,左右端点 (i,L(i)),(i,R(i))(i,L(i)),(i,R(i))(i,L(i)),(i,R(i)) ,满足 1≤L(i)≤R(i)≤n1\le L(i)\le R(i)\le n1≤L(i)≤R(i)≤n从 (1,1)(1,1)(1,1) 出发,要求走过所有线段,到达 (n,n)(n,n)(n,n) ,要求总路程尽可能短。每次只能向下/左/右,每行的线段要走走完。思路:用 f[i][0]f[i][0]f[i][0] 表示走原创 2020-06-19 11:49:05 · 202 阅读 · 0 评论 -
洛谷 P1833 樱花 二进制优化的多重背包
nnn 棵樱花树,不同的树有不同的最多欣赏次数(0 时为无数),看每棵树每次都会花一定的时间,不同的树有不同的美学值,问在给定的时间内,可以得到的最大美学值为多少?思路:混合背包 / 二进制优化在过程中判断是 01背包 / 多重背包 / 完全背包01 背包:每种物品只有一件完全背包:每种物品无数多重背包:每种物品有各自的数量限制01 背包f[i][v]f[i][v]f[i][v] 表示前 iii 件物品满足背包容量可以达到的最大价值,则f[i][v]=max{f[i−1][v],f[i原创 2020-06-19 10:56:04 · 242 阅读 · 0 评论 -
洛谷 P1077 摆花 背包
摆 mmm 盆花,有 nnn 种,按照顺序排,第 iii 个种类最多摆 a[i]a[i]a[i] 盆。求总共有多少种不同的摆花方案。思路:可以看作 01 背包问题,有 nnn 种物品,背包的大小是 mmm ,每种物品个数最多为 a[i]a[i]a[i]#include<iostream>#include<cstdio>#include<algorithm>#define M 1000007#define MAXN 110using namespace std原创 2020-06-18 23:46:21 · 147 阅读 · 0 评论 -
洛谷 P1095 守望者的逃离
M,S,TM,S,TM,S,T 分别表示初始魔法值,起点到终点的距离,限制时间。每个时刻有三种选择:走 171717 米用 101010 点魔法,走 606060 米原地休息,恢复 444 点魔法能到终点则输出最短时间,不能的话则输出能走的最远距离。思路:按照时间去推,由于闪现肯定比跑步快,所以能闪则闪。#include<iostream>#include<cstdio>using namespace std;int m,s,T,s1,s2,t;int ma原创 2020-06-18 23:14:37 · 181 阅读 · 0 评论 -
POJ 1170 Shopping Offers 状压DP+完全背包
Shopping Offers POJ - 1170商店中每个商品都有相应的价值,当一些商品形成组合时,总价格会变低。给定要买的商品及数量,问怎么组合总价最低?状压DP+完全背包代码如下:#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#de...原创 2020-03-31 08:58:13 · 196 阅读 · 0 评论 -
HDU 2159 FATE 完全背包
FATE HDU - 2159有 kkk 种物品(每种有无数个),每种物品价值为 aia_iai,重量为 bib_ibi,小明有一个包,这个包里最多能装 sss 个物品,最大能装的总重量是 mmm。问从这 kkk 个物品里进行选择,最终能否使包里物品的总价值 ≥n\ge n≥n?完全背包,代码如下:#include<iostream>#include<cstdio&g...原创 2020-03-30 22:43:11 · 113 阅读 · 0 评论 -
HDU 2844 Coins 二进制优化的多重背包
Coins HDU - 2844有面值为 a1,a2,⋯ ,ana_1,a_2,\cdots,a_na1,a2,⋯,an 的硬币,分别有 c1,c2,⋯ ,cnc_1,c_2,\cdots,c_nc1,c2,⋯,cn 个,问这些硬币能组成 1∼m1\sim m1∼m 价格中的多少个?二进制优化的多重背包,代码如下:#include<iostream>#include...原创 2020-03-29 22:06:53 · 118 阅读 · 0 评论 -
HDU 2602 Bone Collector 01背包
Bone Collector HDU - 2602裸的 010101 背包#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#define MAXN 1005using namespace std;int T,n,V,v[MAXN],w[MAXN...原创 2020-03-29 20:47:18 · 135 阅读 · 0 评论 -
HDU 1864 最大报销额 背包DP
最大报销额 HDU - 1864有三类可以报销的发票,要求每张发票的总额不超过 100010001000,每张发票上单项物品不得超过 600600600,求在给出的一堆发票中可以报销的最大报销额。首先判断哪些发票是符合要求的,只处理符合要求的发票。然后令 dp[i]dp[i]dp[i] 表示包含第 iii 张发票能够得到的最大报销额,则对于 0≤j≤i−10\le j\le i-10≤j≤i−...原创 2020-03-29 20:33:30 · 131 阅读 · 0 评论 -
HDU 4055 Number String 计数DP
Number String HDU - 4055定义一个只含 1∼n1\sim n1∼n 的数字串 {a1,a2,⋯ ,an}\{a_1,a_2,\cdots,a_n\}{a1,a2,⋯,an} 的签名如下,假如当前大于前一位,则当前位记为 III,否则记为 DDD,比如:the signature of the permutation {3,1,2,7,4,6,5} is “DIID...原创 2020-03-29 18:52:46 · 96 阅读 · 0 评论 -
HDU 4489 The King’s Ups and Downs 组合DP
The King’s Ups and Downs HDU - 4489给一个整数 nnn,求 {1,⋯ ,n}\{1,\cdots,n\}{1,⋯,n} 符合以下条件的的排列数:设 a1,⋯ ,ana_1,\cdots,a_na1,⋯,an 为一个排列,要求该排列中:⋯>ak−1<ak>ak+1<ak+2>ak+3<⋯\cdots>a_{k-1}...原创 2020-03-29 17:51:18 · 160 阅读 · 0 评论 -
HDU 4747 Mex 递推DP/线段树
Mex HDU - 4747定义 mex(S)\mathrm{mex}(S)mex(S) 为集合 SSS 中未出现的最小非负整数。给一个非负整数序列 {ai}i=1n\{a_i\}_{i=1}^n{ai}i=1n,定义 mex(L,R)\mathrm{mex}(L,R)mex(L,R) 为 aL∼aRa_L\sim a_RaL∼aR 之间未出现的最小非负整数,计算:∑1≤L≤R≤nm...原创 2020-03-29 11:17:37 · 283 阅读 · 1 评论 -
HDU 2955 Robberies 01背包
Robberies HDU - 2955准备抢 nnn 个银行,每个银行有对应的钱数 mmm 和相应的被抓概率 ppp,选择抢一部分银行,使得总被抓概率小于 PPP,并且得到的钱数最大。被抓概率小于 PPP 相当于逃脱概率大于等于 1−P1-P1−P,抢的银行总共构成的逃脱概率是:∏i(1−pi)\prod_i(1-p_i)i∏(1−pi)用 dp[i]dp[i]dp[i] 表示抢...原创 2020-03-28 22:12:16 · 111 阅读 · 0 评论 -
UVA 10328 Coin Toss 递推DP+高精度
Coin Toss UVA - 10328一个长为 nnn 的序列,由 H,TH,TH,T 构成,每个位置都可以是 TTT 或者 HHH,那么总共有 2n2^n2n 这样的序列,问这些序列中有多少个序列其中包含至少 kkk 个连续的 HHH?类似 ZOJ 3747 Attack on Titans 带限制的递推DP ,将至少转化为至多:{\{{至多 nnn 个 H}−{H\}-\{H}−{至多...原创 2020-03-28 12:46:35 · 1108 阅读 · 0 评论 -
ZOJ 3747 Attack on Titans 带限制的递推DP
Attack on Titans ZOJ - 3747总共有 nnn 个人,编号 1∼n1\sim n1∼n,三个种类 A,B,CA,B,CA,B,C,要求有连续不少于 mmm 个 AAA 种类的人,连续不多于 kkk 个 BBB 种类的人,问这 nnn 个人的有多少种组合方式?思路参考 https://blog.youkuaiyun.com/wust_ZJX/article/details/468099...原创 2020-03-28 08:24:58 · 131 阅读 · 0 评论 -
CodeForces - 429B Working out 简单DP
Working out CodeForces - 429B一个 n×mn\times mn×m 的矩阵 aaa ,a[i][j]a[i][j]a[i][j] 表示 iii 行 jjj 列可以燃烧的卡路里,第一个人从 a[1][1]a[1][1]a[1][1] 开始,到 a[n][m]a[n][m]a[n][m] 结束,选择 a[i][j]a[i][j]a[i][j] 之后,他可以继续选择 a[i...原创 2020-03-27 16:19:46 · 134 阅读 · 0 评论 -
HDU 2050 折线分割平面 简单DP/图形递推
折线分割平面 HDU - 2050问 nnn 条折线最多能把平面分成几部分?设 dp[i]dp[i]dp[i] 为 iii 条折线的结果,则 dp[1]=2,dp[2]=7dp[1]=2,dp[2]=7dp[1]=2,dp[2]=7当有 n−1n-1n−1 条折线时,区域数为 dp[n−1]dp[n-1]dp[n−1],再加一条折线时,为了能够产生尽可能多的区域,折线的两边要和 n−1n-...原创 2020-03-27 15:10:12 · 136 阅读 · 0 评论 -
HDU 2041 超级楼梯 简单DP/斐波那契
超级楼梯 HDU - 2041mmm 级台阶,每次只能走一级或两级,问有几种走法?设 dp[i]dp[i]dp[i] 为 iii 级台阶的走法数,则:dp[i]=dp[i−1]+dp[i−2]dp[i]=dp[i-1]+dp[i-2]dp[i]=dp[i−1]+dp[i−2]且有 dp[1]=0,dp[2]=1,dp[3]=2dp[1]=0,dp[2]=1,dp[3]=2dp[1]=0...原创 2020-03-27 14:43:50 · 121 阅读 · 0 评论 -
HDU 2044 一只小蜜蜂... 简单DP/斐波那契
一只小蜜蜂… HDU - 2044只能向右方相邻的格子走,问从 aaa 到 bbb 的方案数。可以先观察一下,假如在格子 777,用 dp[i]dp[i]dp[i] 表示格子 iii 可能的方案数,dp[7]=dp[5]+dp[6],dp[8]=dp[6]+dp[7]dp[7]=dp[5]+dp[6],dp[8]=dp[6]+dp[7]dp[7]=dp[5]+dp[6],dp[8]=dp[6...原创 2020-03-27 14:35:46 · 160 阅读 · 0 评论 -
HDU 2018 母牛的故事 简单DP
母牛的故事 HDU - 2018一头母牛,每年生一头母牛,小母牛长到第四年开始生小母牛,问第 nnn 年有多少头母牛?设 dp[i]dp[i]dp[i] 为 iii 年的数量,则 dp[1]=1,dp[2]=2,dp[3]=3dp[1]=1,dp[2]=2,dp[3]=3dp[1]=1,dp[2]=2,dp[3]=3,i>3i>3i>3 时有递推关系:dp[i]=dp[i−...原创 2020-03-27 14:22:09 · 118 阅读 · 0 评论 -
HDU 2084 数塔 简单DP
数塔 HDU - 2084给一个数塔,从顶层走到底层,问经过的结点的数字之和最大是多少?用 dp[i][j]dp[i][j]dp[i][j] 表示第 iii 行第 jjj 列所能得到的最大值,则:dp[i][j]=max{dp[i−1][j−1],dp[i−1][j]}+a[i][j]dp[i][j]=\max\{dp[i-1][j-1],dp[i-1][j]\}+a[i][j]dp...原创 2020-03-27 13:50:26 · 98 阅读 · 0 评论