[JSOI2016]病毒感染[dp]】的更多相关文章

题意 有 \(n​\) 个村庄按标号排列,每个村庄有一个死亡速度 \(a_i​\) 表示每天死 \(a_i​\) 人(除非你治好这个村庄). 你从 1 号村庄出发,每天可以选择向相邻的村庄进发或者治愈所在的村庄. 如果在这个过程中你的左边有未治愈的村庄,同时你向左走了一步,那么你需要把这些村庄全部治愈后才能接着自由行动. 求所有村庄都被治愈时最少的死亡人数. \(n\le3000,a_i\le 10^9\) 分析 如果一个村庄不及时救治,代价就是 \(|返回的位置 - pos| \times a…
传送门 原Word文档 题意:太长不给 这种题目一看就是区间DP 设$f_i$表示治愈了前$i$个村子的时候最少死了多少村民,又设前缀和为$sum_i$,通过枚举折返时最后经过的村子$j$,并且提前计算$i+1$到$N$中死的村民数量,可以得到这样子的方程:$$f_i=\min\limits_{j=1}^i\{f_{j-1}+g_{j,i}+(sum_N-sum_i) \times ((i-j) \times 3 + (i-j+1) + 1)\}$$其中$g_{j,i}$表示从$j$到$i$到$…
题目描述 JOSI 的边陲小镇爆发了严重的 Jebola 病毒疫情,大批群众感染生命垂危.计算机科学家 JYY 采用最新的算法紧急研制出了 Jebola 疫苗,并火速前往灾区救治患者. 一共有 NN 个小镇爆发了 Jebola 疫情.这些小镇由于地处边陲,仅仅通过一条长直公路连接.方便起见我们将这些小镇按照公路连接顺序由 11 编号到 NN.JYY 会在第一天一早抵达 11 号小镇. 一开始在 ii 号小镇,有 a_iai​ 名患者感染了 Jebola 病毒. 每一天 JYY 可以选择: 花费一…
题目传送门:洛谷P5774 思路来源:郭大佬(我就是凑不要脸的白嫖党 : P) 题目分析: 我们一点点来分析这道题: 起点固定为1号,所有村庄是按线性排列的,而不是图,所以我们应该用线性DP(废话 ) 每到达一个村庄,我们都有两种选择:一是治好这个村庄的所有人,二是直接莽到下一个村庄(当然也可以回头):而每一种操作都需要消耗一天的时间(时间是这道题最恶心的地方) 而如果我们选择莽过了一个村子,那么一旦我们在后面某一个时间选择往回走,就必须回来把这个村子给治好,并且在返回的途中也是可以顺手治好顺路…
区间\(dp\)提升复习 不得不说这波题真的不简单... 技巧总结: 1.有时候转移可以利用背包累和 2.如果遇到类似区间添加限制的题可以直接把限制扔在区间上,每次只考虑\([l,r]\)被\([i,j]\)完全包含的情况 [BZOJ4897] [Thu Summer Camp2016] 成绩单 典型的利用背包转移,\(dp[i][j]\)表示处理完这段\([i,j]\)区间的答案 转移时一段区间可以被先处理掉或者直接从已经处理完的\(dp[i][j]\)中取过来,这个可以用一个背包维护 con…
正解:区间dp+辅助dp 解题报告: 先放个传送门qwq 然后这题,又是一道看不懂题目的玩意儿:( 大概是语文太差 那就先解释下 其实只是一个点比较难明白就是它港 "假设JYY 进入i村庄并在第二天立即离开(村庄i的疫情并未治愈如果在之后的某一天,JYY 从村庄j前往村庄 k并满足balabala(umm懒得打了QAQ).那么在之后的日子里JYY只能朝着i村庄前进直到抵达i村庄并立即治愈该村的患者" 然后其实这句话就是说如果你掉头了你就必须把回头的这一路上没治的都治好 昂然后就直接讲正…
题目 洛谷 P4322 [JSOI2016]最佳团体 Description 茜茜的舞蹈团队一共有\(N\)名候选人,这些候选人从\(1\)到\(N\)编号.方便起见,茜茜的编号是\(0\)号.每个候选人都由一位编号比他小的候选人\(R_i\)推荐.如果\(R_i=0\)则说明这个候选人是茜茜自己看上的.为了保证团队的和谐,茜茜需要保证,如果招募了候选人\(i\),那么候选人\(R_i\)也一定需要在团队中.当然了,茜茜自己总是在团队里的.每一个候选人都有一个能力值\(P_i\),也有一个招募费…
题目链接 \(Description\) 每个点有费用si与价值pi,要求选一些带根的连通块,总大小为k,使得 \(\frac{∑pi}{∑si}\) 最大 \(Solution\) 01分数规划,然后dp,设f[i][j]表示i子树选j个的最大权值和,直接暴力背包转移即可 在枚举子节点选的数量时,假设x有1.2.3.4四个子节点,复杂度为 \(1*sz[1]+sz[1]*sz[2]+(sz[1]+sz[2])*sz[3]+(sz[1]+sz[2]+sz[3])*sz[4]\) 相当于每对点在L…
题解 那个限制表示一回头要治完前面的所有病人 我们处理一个g[i][j]表示治疗i到j的病人至少会死多少病人 \(g[i][j] = g[i + 1][j] + sum[i + 1,j] + min(sum[i + 1,j],(i - j) * 3 * a[i])\) 每次新加一个i,要么治疗i要么转一圈回来再治 \(f[i] = min(f[j] + g[j + 1][i] + ((i - j) * 4 - 2) * sum[i +1,n])\) 表示处理前i个需要的最小代价 代码 #incl…
第一种方法是决策单调性优化DP. 决策单调性是指,设i>j,若在某个位置x(x>i)上,决策i比决策j优,那么在x以后的位置上i都一定比j优. 根号函数是一个典型的具有决策单调性的函数,由于根号函数斜率递减,所以i决策的贡献的增长速度必定比j快. 于是使用基础的决策单调性优化即可. 注意两个问题,一是DP函数要存实数而不能存整数,因为先取整会丢失在后面的判断中需要的信息.二是记录决策作用区间的时候左端点要实时更新,即下面的p[st].l++,否则在二分时会出现错误. #include<c…