![](https://img-blog.csdnimg.cn/20190918135101160.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
DP
文章平均质量分 69
动态规划,常见背包、状压dp等各类dp
米莱虾
19软工 Unity3D游研工程师 GameJam亚军
ACM-ICPC国际大学生程序设计竞赛亚洲区域铜牌
全国大学生算法设计与编程挑战赛团队赛金奖rank9
全国大学生算法设计与编程挑战赛个人赛一金一铜
2020&2021全国大学生IT技能大赛国二等奖
2021&2020中国高校计算机大赛总决赛铜牌
亚太经济地区大学生数学建模竞赛二等奖
全国大学生创新促进就业大赛国决三等奖
中国软件智能应用程序设计大赛三等奖
计蒜之道程序设计大赛决赛Rank前列
全国大学生英语竞赛国家三等奖
展开
-
【数据结构】逛公园(spfa+dp)
题面题意策策同学特别喜欢逛公园。公园可以看成一张 N 个点 M 条边构成的有向图,且没有自环和重边。其中 1 号点是公园的入口,N 号点是公园的出口,每条边有一个非负权值,代表策策经过这条边所要花的时间。策策每天都会去逛公园,他总是从 1 号点进去,从 N 号点出来。策策喜欢新鲜的事物,他不希望有两天逛公园的路线完全一样,同时策策还是一个特别热爱学习的好孩子,他不希望每天在逛公园这件事上花费太多的时间。如果 1 号点到 N 号点的最短路长为 d,那么策策只会喜欢长度不超过 d+K 的路线。策策原创 2022-05-25 19:35:49 · 407 阅读 · 0 评论 -
【C++】社区医院建设(树形DP/二次扫描与换根法)
题目描述设有一棵二叉树,如图:其中,圈中的数字表示结点中居民的人口。圈边上数字表示结点编号,现在要求在某个结点上建立一个医院,使所有居民所走的路程之和为最小,同时约定,相邻接点之间的距离为 1。如上图中,若医院建在1 处,则距离和 =4+12+2×20+2×40=136;若医院建在 3 处,则距离和 =4×2+13+20+40=81。输入格式第一行一个整数 n,表示树的结点数。接下来的 n行每行描述了一个结点的状况,包含三个整数 w u v,其中 w 为居民人口数,u为左链接...原创 2022-05-11 16:32:39 · 407 阅读 · 0 评论 -
2021百度之星测试赛题解
测试赛好像没啥人玩儿...最后一题有点烦,估计大家觉得没啥意思就没去AC。今年报名人数近两万了,相比17年,真是暴增了好级几倍啊...贴个代码,留个纪念T1-度度熊保护村庄#include <bits/stdc++.h>using namespace std;const int MAX=1<<28;const int N=666;int n,m,f[N][N];struct we {int x,y;} a[N],b[N];int qwq(..原创 2021-07-28 14:49:07 · 1227 阅读 · 4 评论 -
UPC 2021个人训练赛第20场——问题J:售票厅
题面:题目描述售票厅出售关于音乐会的票,取代原来的卖一张票的形式,而是一组座号连续的票。售票室已经收到很多预订。每个预订包含指定最小座号的一组连续的票。售票厅不能满足所有这样的订票。如果出售所有这样的订票,那么将会有大量数目的座号为空。于是售票室作了如下的安排和价格策略,如果一个订单被接受并且安排了确定的作为,则预定者必须付全部的票的价格(2元)。如果一个订票被接受,但是被安排的位置与申请的位置不一样(最少有一个位置),那么预定者只需付一半的价格(1元)。售票室的目标是最大限度增加售票总收入。你的原创 2021-06-12 21:42:15 · 139 阅读 · 0 评论 -
UPC 2021个人训练赛第9场 题解
问题 A: Linear Cellular Automata#include <bits/stdc++.h>#define ll long long using namespace std;int a[66], b[66], p[66];int main(){ int t; scanf("%d", &t); while(t--) { memset(a, 0, sizeof(a)); memset(b, 0,si原创 2021-05-14 23:29:33 · 635 阅读 · 2 评论 -
动态规划之4大背包问题详解
多用图文、举例讲解每个背包问题、深入剖析原理&步骤由来、结合经典例题联系&区别不同背包问题的特征、从朴素做法优化至最优做法、附经典普适AC模板原创 2020-10-10 10:51:57 · 625 阅读 · 0 评论 -
动态规划之多重背包【暴力->优化】(实例讲解优化过程&原理)
/*f[i]:总体积是i的情况下,最大价值是多少 for(int i=0; i<n; i++){ for(int j=m; j>=v[i]; j--) f[j] = max(f[j], f[j-v[i]]+w[i], f[j-2*v[i]]+2*w[i]...);} 初始化时,如果把所有状态都初始化为0了,那么f[m]就是答案若只令f[0]=0,其他的都是负无穷,则从f[0~m]中选一个最大值即:1. f[i]=0 f[m]2. f[0]=0, f[原创 2020-10-09 09:06:45 · 270 阅读 · 2 评论 -
动态规划之完全背包【闫氏DP分析法】(联系01背包附图剖析原理)
完全背包和01背包的题目很相似,优化处理后,代码也很相似,但是其中蕴含的道理大相径庭。相似体现在:01背包优化后,第二重循环的 j 由从大到小改为从小到大之后,就能直接应用AC。两者在题目中的不同主要体现在:01背包每种物品只能用一次,而完全背包的每种物品都有无限件可以使用。而他们的内在区别主要体现在:状态计算,即集合的划分(在01背包里,是以第i个物品选或者不选为界分成两个集合; 而在完全背包里,因为第i个物品有无限件可以选择,所以在枚举时,要划分成若干个子集,而不是两个子集)。完全背包的步骤:原创 2020-10-07 15:35:40 · 337 阅读 · 0 评论 -
动态规划之01背包【从暴力到优化】
动态规划 ——DP 的介绍动态规划 (DP) 是一种算法技术,它将大问题分解为更简单的子问题,对整体问题的最优解决方案取决于子问题的最优解决方案。有的问题有 2个特征:重叠子问题、最优子结构。用 DP可以高效率地处理具有这 2个特征的问题。处理 DP的大问题和小问题,有两种实现方式 ——自顶向下与记忆化递归 / 自下而上与制表递推。以斐波那契为例,两种实现方式的代码分别如下:// 自顶向下与记忆化递归int memoize[maxn]; //保存结果int fib (int n){原创 2020-09-20 15:29:47 · 338 阅读 · 0 评论 -
牛客假日团队赛54签到题题解
裸DP、差分、模拟、思维原创 2020-09-15 23:32:15 · 724 阅读 · 0 评论 -
UPC 2020年夏混合个人训练第七十九场
质数和分解、背包问题、用结构体连接字符串输出、数学性质(中心点)探究 + 特判原创 2020-08-15 21:35:10 · 313 阅读 · 2 评论 -
牛客等级之题8.4——题解【购物&拯救单身狗】
优先队列、动态规划、模拟原创 2020-08-04 09:44:14 · 466 阅读 · 0 评论 -
UPC 2020年夏混合个人训练第七十五场
// A.#include <bits/stdc++.h>#define MAXNUM 101#define MAX(a,b) a>b?a:b int m; //建筑的种类数 int n; //土地的面积 int k; //使用的金钱数 int q[MAXNUM]; //建筑i的占地面积 int p[MAXNUM]; //建筑i的价格int v[MAXNUM]; //建筑i的魅力值 int f[MAXNUM][MAXNUM]; //f表示前原创 2020-08-03 19:29:41 · 355 阅读 · 0 评论 -
牛客算法周周练16全题解
模拟(证明)、博弈论(sg函数)、分层图最短路(动态图)、线段树+DP原创 2020-07-23 16:39:08 · 1039 阅读 · 0 评论 -
UPC 2020年夏混合个人训练第六十三场
数学+数论+模拟、DP+离散化原创 2020-07-16 09:43:32 · 313 阅读 · 0 评论 -
天平问题(背包DP)题解
UPC NO.59 问题 D: 天平问题题目描述小C为了试验小X,便为物竞的小X出了一道物理相关的题:现在给出n个质量的砝码,问小X能称出多少种质量的物品,可是总有好事者想要破坏,于是乎,n达到了500,远远超出了小X能够承受的范围,锲而不舍的他决定寻求你们的帮助。输入第一行输入一个的正整数N以下N行每行一个不超过200的正整数,依次表示每个砝码的质量。输出输出总共能称出多少种不同质量的物品。样例输入3139样例输出13提示注意:天平有两边,两边均可放。100%: n<原创 2020-07-10 22:38:21 · 846 阅读 · 0 评论 -
UPC 2020年春混合个人训练第二十场
bfs、状压dp原创 2020-05-17 09:28:11 · 445 阅读 · 0 评论