自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

lllllan

盛意以江河,江河不及你

  • 博客(51)
  • 资源 (1)
  • 收藏
  • 关注

原创 专题整理——动态规划

知识点整理基础DP(一)——硬币问题基础DP(二)——0/1背包基础DP(三)——最长公共子序列LCS基础DP(四)——最长递增子序列LIS递推与记忆化搜索区间DP树形DP题目练习题目题解类型...

2020-08-14 22:39:32 234

原创 HDU1269 迷宫城堡——强连通(Kosaraju/Tarjan)

点这里题意: 判断一个有向图G是不是强连通图。题解: Kosaraju算法#include<bits/stdc++.h>using namespace std;const int N = 1e4 + 10;int n, m, u, v;int cnt, vis[N], scc[N];vector<int> G[N], rG[N];vector<int> S;void dfs1(int u){ vis[u] = 1; for(int...

2020-08-31 15:16:37 132

原创 强连通分量Kosaraju算法

优秀博客[C++图论] 强连通强连通图的算法概念  强连通: 在有向图G中,如果两个点u、v是互相可达的,即从u出发可以到达v,从v出发也能到达u,则称u和v是强连通的。如果G中的任意两个点都是互相可达的,称G是强连通图。  强连通分量: 如果一个有向图G不是强连通图,那么可以把他分成多个子图,其中每个子图的内部是强连通的,而且这些子图已经扩展到最大,不能与子图外的任意点强连通,称这样的一个 “极大强连通” 子图是G的一个强连通分量(SCC)。算法原理一个有向图G...

2020-08-31 15:12:44 229

原创 HDU1019 Least Common Multiple——多个数的最小公倍数

点这里题意: 求多个数的最小公倍数题解: 没什么好说的,数不会太多,挨个求相邻两个数的最小公倍数,得到的这个数与下一个数继续求最小公倍数,直到最后一个数结束。最小公倍数 = x * y / x、y的最小公约数。过程中犯的错:最小公倍数 = x * y / x、y的最小公约数。 数学上这个是没错,但是如果定义的是int, 那么在前两个数相乘的时候,就有可能会超出int的范围。#include<bits/stdc++.h>using namespace std;...

2020-08-29 22:12:51 126

原创 HDU3749 Financial Crisis——点双连通分量(tarjan+并查集)

点这里题意: 给定一个无向图,后续有q个查询,问你u点与v点之间有几条(除了首尾两点外,其他点不重复)的路径。如果有0条或1条输出zero或one,如果有2条以上,输出two or more。题解: 求割点很容易,判断两点连通是否连通也只需要借助并查集,但至于两点间有多少不重复路径,需要另开数组记录。s[N]: 采用并查集的方式判断连通性。vector vec[N]: 记录第i个连通分块下的所有节点。并用tag[N]记录第i个节点当时属于哪个连通分块(一个节点可以属于多个连通分块,只...

2020-08-29 09:01:44 163

原创 HDU4587 TWO NODES——割点(枚举+tarjan)

点这里题意: 一个无向图G,求在删除任意两个点以后的最大割点数。题解: 需要删除两个点,此时枚举删除第一个点,此时要清楚删除这个点以后有多少个连通分块block然后去求tarjan,而iscut[]就用来计算每个点删除以后能够产生多少连通分块,第二个点选其最大值即可。最后的答案就是max(iscut[i] + block[i]) - 1。过程中犯的错:iscut[i]–: 注意这个出现的位置,需要减的都是根节点,特意减一是因为,一旦这个连通分块只有根节点一个点,而我第二个点又刚好选...

2020-08-28 18:30:51 153

原创 HDU 3394 Railway——点双连通分量(tarjan+割边)

点这里题意: 给定一个无向图,要求输出图中多余边和冲突边的数量。题解: 多余边就是割边,求割边套模板就能做。冲突边:一个点双连通分量中如果边数大于点数,则所有边都是冲突边。#include<bits/stdc++.h>using namespace std;const int N = 1e4 + 10;int n, m, u, v;int ans1, ans2, ds_cnt, dfn;int low[N], num[N], vis[N];vector<...

2020-08-26 16:50:56 187

原创 POJ 1523 SPF——割点(tarjan)

点这里题意: 给定一个无向图,判断图中是否含有割点,如果有,请输出每个割点的编号以及删除该割点以后会分割成几个连通分块。输出格式为SPF node ? leaves ? subnets没有割点则输出No SPF nodes。题解: 只是在tarjan求割点的模板上,追问了一个连通分块的问题,变化只在于if(low[v] >= num[u] && u != 1) iscut[u] = true;应该改成ans[u]++;ans[]用来统计某割点删除后能将图分割成多少个连...

2020-08-26 14:20:30 120

原创 HDU2460 && POJ3694 Network——割边(tarjan+LCA)

点这里题意: 给定一张无向图,有q次插入,每次插入一条新边,并输出插入后桥(割边)的数量。题解: 在插入之前跑一遍tarjan先计算原有割边的数量。后来每次插边都做一次LCA,将插边的端点x和端点y到其最近的公共祖先点路上的所有割边全部删除。过程中犯的错:重边。 看样例二就应该清楚,这道题是有重边的。数组大小。 采用了链式前向星的存图方式,一共有二十万条边,因为是无向图,所以每条边都要用两条有向边表示,因此数组大小应该开四十万。割边计算。 看书的时候,说是去掉一个等号,计算割点...

2020-08-26 11:00:53 149

原创 POJ3352 Road Construction——边双连通分量(tarjan+缩点)

点这里题意: 给定一个无向图G,图中没有重边。问添加几条边才能使无向图变成边双连通图。题解: 缩点。 方法参考双连通分量。过程中犯的错:ans计数: 程序里tarjan函数里有一行批成注释代码,那是错误的。#include<iostream>#include<algorithm>#include<vector>using namespace std;const int N = 1e3 + 10;int n, m, dfn, low[N];v

2020-08-25 16:21:55 314

原创 双连通分量

概念点双连通: 在一个连通图中选任意两点,如果它们之间至少存在两条“点不重复”的路径,成为点双连通。点双连通分量: 一个图中的点双连通极大子图。点双连通分量是一个“可靠”的图,去掉任意一个点,其他点仍然是连通的。也就是说,点双连通分量中没有割点。边双连通: 在一个连通图中任意选两点,如果它们之间至少存在两条“边不重复”的路径,成为边双连通。边双连通分量: 一个图中的边双连通极大子图。边双连通图中没有割边。点双连通分量  求解点双连通分量和求割点密切相关。不同的点双连通分量最多只有一个公共点,即

2020-08-25 15:49:29 487 1

原创 POJ1144 Network——割点(tarjan)

点这里题意: 输入一个无向图,求割点的数量。题解: 模板题,注意输入就可以了,剩下的套模板就能解决。#include<iostream>#include<algorithm>#include<cstring>#include<vector>using namespace std;const int N = 110;int n, ans, dfn;int num[N], low[N];bool iscut[N];vector<

2020-08-25 10:03:34 188

原创 HDU2894 DeBruijin——欧拉回路(非递归DFS+构造)

点这里题意: 中文题面,相信你看到的,不再赘述。题解: 今天做到的欧拉回路构造第三次了,可参考POJ1780 Code——欧拉回路(非递归DFS)。过程中犯的错:mod: 每次循环pre都要更新,而pre的更新运算又与mod相关,mod的大小应为2k-2。pre: pre的更新一直弄错,pre = (pre % mod) * 2 + deg[pre] - 1;这个不解释可能过几天我自己也忘记了。意为剪去pre的第一位数字(即pre % mod)之后加上末尾新的数字,十位数肯定是处理不了的,

2020-08-24 21:39:31 162

原创 HDU4850 Wow! Such String!——欧拉回路(非递归DFS+构造+字符串)

点这里题意: 给定一个n,要求输出一个长度为n的字符串,并且不会有长度大于等于4的重复的子串,不能得到输出impossible。题解: 这题就跟POJ1780 Code——欧拉回路(非递归DFS)很像。无非这里变成了字符串处理起来烦一点点 ,也就亿点点。构造。 当然了,能重复的子串长度不能超过3,已经可以写一个很长很长的字符串了,当然是先构造好一个条件允许下最长的字符串,然后输出要求长度就行了。点。 既然是欧拉回路的问题,点是什么,是构造到当前位置时,前三位字母构成的字符串。边。 所有的点,后

2020-08-24 19:33:29 144

原创 HDU5883 The Best Path——欧拉路(异或)

点这里题意: T组数据,n个湖(即点),m条河(即边),并且每个点都有一个权值。如果这个图能构成欧拉路(包括回路),求从起点异或到终点的值中的最大值。题解:连通性。 由于题目性质,这道题中的点都是相互连通的,不需要另外判断。欧拉路(回路)。 判断所有点的度数即可:欧拉回路——所有点都是偶点,欧拉路——只有两个奇点,其他全为偶点。异或结果。 实际上没到一个点都要求一遍异或,那为什么可以求最大值呢?而且欧拉回路中虽然边不重复,但是点会重复,那么我们一个点需要求几次异或呢?(deg[i] + 1

2020-08-24 16:52:17 141 1

原创 HDU1116 Play on Words——欧拉路(有向图+并查集)

点这里题意: T组输入,每组输入有n个单词,要求将所有单词两两首尾相连,要求是前一个单词的最后一个字母和后一个单词的最后一个字母必须相同。如果能将所有单词连成一串,输出Ordering is possible.否则输出The door cannot be opened.题解: 看完题目就能知道是一个欧拉路的问题。而欧拉路的判断条件有:连通性。 用并查集判断即可。欧拉路。 只有两个点的入度和出度差为1和-1,其他所有点的入度和出度必须相等。欧拉回路。 所有点的入度和出度均相等。显然欧拉回路也符合

2020-08-24 13:10:15 280

原创 HDU1878欧拉回路——欧拉回路(并查集)

点这里题意: 中文题面,直说求欧拉回路,再也不能说英文题看不懂了题解:连通性: 并查集。 连通的点用并查集合并,最后判断如果连通区块大于1,则图是不连通的。欧拉回路: 在连通的基础上,判断是否所有点都是偶点即可。#include<bits/stdc++.h>using namespace std;const int N = 1e3 + 10;int n, m, a, b;int s[N], deg[N], G[N][N];int find(int x){ re

2020-08-24 10:31:21 143

原创 POJ1780 Code——欧拉回路(非递归DFS)

点这里题意: 有个保险箱子是n位数字编码,当正确输入最后一位编码后就会打开(即输入任意多的数字只有最后n位数字有效)……要选择一个好的数字序列,最多只需按键10n + n - 1次就可以打开保险箱子,即要找到一个数字序列包含所有的n位数一次且仅一次。题解:为什么是按键10n + n - 1次。 不管你按键多少次,判断密码是否正确都是判断你按键的最后n位数,也就是说我们不需要真的按 n * 10n 个数字,只要一长串的数字当中出现过密码就行。欧拉回路。 冥冥之中就有感觉是一道欧拉回路的问题,但为什

2020-08-23 23:22:51 201

原创 欧拉路

  欧拉路和欧拉回路的概念  欧拉路: 从图中某个点出发遍历整个图,图中的每条边通过且只通过一次。  欧拉回路: 起点和终点相同的欧拉路。  度数: 一个点上连接的边的数量称为这个点的度数。在无向图中,如果度数是奇数则这个点称为奇点,否则则称为偶点。在有向图中有出度和入度。欧拉路和欧拉回路是否存在首先图应该是连通图。而图的连通性用DFS或并查集来判断无向连通图的判断条件:存在欧拉回路: 图中的点全都是偶点。存在欧拉路: 图中只有两个奇点,其中一个奇点是起点,另一个是终点。不可能

2020-08-23 19:31:23 344

原创 UVA10054 The Necklace——欧拉回路(DFS)

点这里题意: 有n个珠子。每个珠子有两种颜色,分布在珠子的两边。一共有50种不同的颜色。把这些珠子串起来,要求两个相邻的珠子接触的部分颜色相同。问是否能连成一个珠串项链?如果能,打印出一种连法。题解: 一开始看样例其实我有点懵 ,每行给出某个珠子的两个颜色,然后相同颜色的能相连。其实我们换个角度,把行输入看成是一条边(原本代表一个珠子的两个颜色),把每种颜色看成一个点。那么我们的任务就简单明了了,把所有的颜色连起来,每条边通过且只通过一次——欧拉回路。连通。 一般情况下是需要用DFS、并查集等方法

2020-08-23 19:09:37 220

原创 HDU1811 Rank of Tetris——拓扑排序(BFS+并查集缩点)

点这里题意: n个人个m个约束条件,每行约束条件都有“<>=”符号,“=”表示两人同级,两个人之间编号大的在前。按照已知条件如果排名唯一,则输出OK;排名不唯一则输出UNCERTAIN;约束条件之间矛盾则输出CONFLICT。题解:缩点(并查集)。 不要想 的太复杂 (我就是一直在考虑“=”怎么处理,一直没敢下手) 其实所有=联系的点,合并成一个点处理即可,他们内部的排名肯定是能够确认的,题目不要求输出排名,那就不用在意,看成一个点处理就行。这步处理,则是采用并查集的方式。CONF

2020-08-22 21:38:35 124

原创 HDU3342 Legal or Not——拓扑排序(裸题)

点这里题意: n个人和m对人机关系,每对人机关系x、y表示x是y的师傅。人机关系具有传递性,即我的师傅的师傅也是我的师傅,我的徒弟的徒弟也是我的徒弟。要求找出人际关系中是否含有不合法的,即如果出现某个人既是我的师傅,也是我的徒弟,则关系不合法,输出NO,全都合法输出YES。题解: 刚看题意觉得新鲜,其实就是拓扑排序的裸题,按照拓扑排序的模板走完,如果还要人的入度不为0,说明内部构成了循环,而构成循环的原因就是出现了不合法的关系。#include<bits/stdc++.h>using

2020-08-22 15:42:04 237

原创 POJ1270 Following Orders——拓扑排序(DFS回溯+字典序)

点这里题意: 多组输入,每组输入的第一行列出受约束的字符。第二行每对字符a、b表示a必须排在b的前面。要求输出所有可行的情况,按字典序排序。结尾用空行分开。题解: 不同以往的数字,这次受约束的是小写字母,可以在排序之后将字母转换成数字,也可以利用map来解决。因为要输出所有可行的情况,所以需要用DFS,并且还得回溯。过程中犯的错:字典序。 又是偷懒读题,因为题面是英文的,缺乏耐心,以为自己读懂题就不继续往下读了,然后就漏了这么一个大条件。第二行约束条件的获取。 读完题目自然知道清楚每两个字符

2020-08-22 11:47:34 377

原创 HDU4857 逃生——拓扑排序(反向建图+优先队列)

点这里题意: n个人逃生,m个限制条件。后m行每行两个数a,b表示a必须在b前面逃生。如果两个人x和y没有先后先后限制,则编号小的在前。题解: 一定要反向建图。坑点看后续过程中犯的错:人数太多。 傻傻地建了一个30000*30000的二维数组,然后运行的时候显示源文件未编译,完了都没发现错在哪里。不用去重。 样例中就有重复出现1 2,于是我就定义一个set用来去重,结果造成了MLE。实际上想了一下,邻接表不同于邻接矩阵,重复了也没关系。正向建图+优先队列。 思路很清晰,觉得特别完美。但问题

2020-08-21 22:36:08 213

原创 HDU1075 What Are You Talking About——字典树、map

点这里题意: 在START 和END 之间给出一个替换列表,每行有两个单词a和b。之后又在START 和END 给出几句话,要求把每句话中,在替换列表出现过的b,都替换成a。题解: 一个字符串替换成另一个字符串,用map来做是最简单的。同时为了复习字典树,也用字典树做了一遍。过程中犯的错:每句话中取单词。后续代码中呈现的是我能想到的最简便的方法,一开始为了这个弄得非常复杂。字典树中的search 函数。我特意改成了返回string类型,方便我直接输出。但是有一种情况,比如我替换列表中出现了单

2020-08-21 11:26:19 96

原创 HDU1285 确定比赛名次——拓扑排序(BFS+优先队列)

点这里Problem Description有N个比赛队(1<=N<=500),编号依次为1,2,3,。。。。,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩,只知道每场比赛的结果,即P1赢P2,用P1,P2表示,排名时P1在P2之前。现在请你编程序确定排名。Input输入有若干组,每组中的第一行为二个数N(1<=N<=500),M;其中N表示队伍的个数,M表示接着有M行的输入数据。接下来的M行数据中,每行也

2020-08-20 23:05:21 208

原创 HDU3555 Bomb——简单数位DP

点这里题意: 统计n以内含49的数的个数。题解: 定义状态dp[i][]dp[i][0]表示i位数里不含49的个数。dp[i][1]表示i位数里不含49,但首位是9的个数。dp[i][2]表示i位数里含49的个数。过程中犯的错:dig数组忘记初始化,影响下一次数据的答案。一般DP#include<bits/stdc++.h>using namespace std;typedef long long ll;int t, dig[65];ll n, dp[6

2020-08-20 15:29:54 119

原创 HDU3729 I‘m Telling the Truth——最大匹配+最大字典序

点这里题意: 每个人对应一个分数区间,而每一个分数只能有一个人,求能将一个人对应一个分数的最大人数。输出最大匹配,还要输出这些匹配的人的序号,按最大字典序。题解: 除了输出每个人的序号,都是最大匹配的裸题,套个模板就能做。至于按照最大字典序输出,其实只要再匹配的过程中,是从n->1进行匹配的就可以了。做题过程犯的错:用了页面的翻译,导致题面显示出错,数据大小100000多了一个人,导致我写的时候开了1e6的大小,提交之后TLE了。#include<bits/stdc++.h&

2020-08-20 14:01:25 142

原创 Pair

  pair是将2个数据组合成一组数据,需要用到头文件<utility>。1.定义<>中可以是int char double string等等,甚至还可以是pair,如pair4,注意后面的两个>需要用空格隔开。pair<int, int> pair1;pair<int, int> pair2(1, 2);pair<int, int> pair3(pair2);pair<int, pair<int, int>

2020-08-19 16:25:14 154

原创 HDU1083 Courses——最大匹配裸题

点这里题意: n个学生和p个课程,要求每个课程都有一个对应的课代表,并且一个学生只能担任一个课代表。如果这个最大匹配等于学生人数,则输出YES,否则输出NO。题解: 就是一个最大匹配的裸题,题目看懂就能直接套模板,不会写的应该是模板不会用,建议先去学好匈牙利算法。过程中犯的错:题意没有弄清楚,求最大匹配是毋庸置疑的,但我想当然地以为是最大匹配等于课程数量就可以了,(毕竟下意识认为多少课程就需要多少课代表咯),但是这个题目的要求是最大匹配等于学生人数才输出YES。模板不熟悉,我尝试着想背出模板

2020-08-19 12:08:43 120

原创 HDU1217 && POJ2240 Arbitrage——字符串+Floyd

点这里题意: n种货币和m种兑换方式,如果存在某种兑换路径使得,货币x兑换一圈回来以后获得更多的货币x,则输出Yes,否则输出No。题解: 因为货币是以字符串形式出现的,同样是把字符串转变成数字之后再用Floyd的模板,函数里稍稍改动一下就可以了。strcmp处理这是我翻到的半年前做的,有些青涩啊,当时可能还不知道map,也不会想到有没有什么方便的工具可以使用。就老老实实地挨个去查找,然后赋予数值。#include<bits/stdc++.h>using namespace st

2020-08-19 11:27:44 251

原创 HDU2112 HDU Today——字符串地名+Floyd

点这里题意: 告诉你有n路公交车,先给出起点和终点的地名,注意是字符串类型;然后依次给出n路公交车的起点、终点和所需时间。如果能从起点到目的地,则输出最短距离,不能到达则输出-1。题解: 地名从一般题目的数字变成了字符串而已,那我们就把字符串转换回数字,我用了map,如果这个地名先前没有出现过,我就赋予他一个新的int值;如果出现过,那就使用先前赋予的值。转换成数字之后,用最简单的Floyd的模板就能做。做题过程中做错的点:初始化,又无脑地memset(dis, inf, sizeof dis

2020-08-19 10:53:02 133

原创 HDU 1024 Max Sum Plus Plus——滚动数组

点这里题意: 从长度为n的数组中取出m段不相交的子段,求取出子段的最大和。题解: 先思考只取一段的最大值问题,很容易能想出定义状态dp[i]表示第i位的最值问题,其状态转移方程为dp[i[ = max(dp[i - 1] + s[i], s[i])。但问题在于我们需要取出m个子段。我们可以按照先计算只取一段的最值,然后再思考取两端的最大和,逐步递推,直到取出m段。   定义一个数组lmax[i]表示到i为止能取到的最大和,从而状态转移方程变为dp[i] = max(dp[i - 1], lmax[i

2020-08-18 16:51:20 94

原创 HDU 2196 Computer——树形DP

点这里题意: 一棵树有根树,根节点的编号是1,对其中的任意一个节点,求离他最远的节点的距离。复杂度分析: 如果求从一个特点节点出发的最长路径,可以从这个节点出发,做一次BFS,每次扩展邻居节点,并记录到这个邻居节点的最长距离,复杂度是O(n)。求所有n个节点的最长距离,需要对每个节点单独做一次BFS,总复杂度为O(n2).但是由于题目规模较大,N≤10000,所以算法的复杂度最多只能是O(nlog⁡2n\log_2 nlog2​n)。如图,以节点4为例,它的最长距离分两种情况讨论:以4为

2020-08-18 12:31:35 181

原创 数位DP

  这个专题学习的时间跨度有些大,因为被中间的训练给隔开了,然后我发现我好像突然对树形DP有些陌生了,我是废物 ,改天再加深一下印象。  所谓“数位DP”,是指对数字的“位”进行与计算有关的DP。一个数有个位、百位、百位、千位等。数的每一位就是数位。数位DP用来解决于数字操作有关的问题,这些问题的特征是给定的区间特别大,不能用暴力的方法逐个检查,必须用接近O(log⁡2n)O(\log_2 n)O(log2​n)复杂度的算法。解题的思路是用DP对“数位”进行操作,记录算过的区间的状态,然后再后续计算中,快

2020-08-18 01:12:51 118

原创 DFS入门

文章目录问题引入数方块走迷宫N皇后问题DFS算法演示代码运行递归存图移动选择访问标记在介绍DFS之前呢,我想先说说我第一次接触DFS时的一个状态,当时好像时某个学姐在讲课,直接给我整懵了,介绍题目的时候我的第一反应就是这样的题目也能代码实现吗(实际上我当时的水平可能就停留在简单的输入输出),在解释算法原理的时候也是听的云里雾里,代码解析的时候更是懵的一批。所以听不懂也没有关系啊,因为时录播的视频,大家有那里听不懂的可以暂停思考一下或者再看一遍,实在看不懂也可能是我解释的不是特别清楚,也可以私聊找我。问题

2020-08-14 14:40:36 283

原创 8-12 队伍训练2

序号题目SolvedAttempted补题ATokitsukaze and Rescue/铁子BBlow up the Enemy铁子/CContest of Rope Pulling//DDeliver the Cake/午夜EEqual Sentences铁子/FGo Running//GKindergarten Physics午夜/HLast Problem//I...

2020-08-12 22:17:13 272

原创 8-11队伍训练1

序号题目AC补题ADistinct Sub-palindromes√BFibonacci SumCLeading RobotsDFinding a MEXELead of Wisdom√FThe Oculus√GTotal EclipseHTokitsukaze and MultipleILittle W and ContestJParentheses Matching√...

2020-08-12 00:40:02 274

原创 cin cout string题解报告

文章目录hdu1090简单输入输出scanf代码cin代码hdu2002格式输出printf代码cout代码poj3981字符串替换getchar解决gets解决string解决hdu1062字符串翻转string解决stack解决(作了解)hdu1090简单输入输出题意: 输出 a + b。scanf代码#include<stdio.h>int main(){ int t, a, b; scanf("%d", &t); while(t--){

2020-08-11 00:25:01 162

原创 树形DP

引入  顾名思义,树形DP就是指在“树”上进行的DP:给出一棵树,要求以最少的代价或取得最大的收益完成给定的操作。而用DP的意义在于,通常这类题目的规模较大,枚举的效率比较低,贪心不能得到最优解,因此用到DP。  比如hdu1520这道题目。  一棵有根树每个节点上有一个权值,相邻的父节点和子节点只能选择一个,问如何选择使得总权值之和最大(邀请员工参加宴会,为了避免员工和直属上司发生尴尬,规定员工和直属上司不能同时出席)。  输入:节点编号从1到N。第一行是数字N,1≤N≤6000.后续N行中的每

2020-08-08 23:11:40 157

2015 ICPC 长春pdf

2015 ICPC 长春pdf

2020-11-13

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除