P1144最短路计数[普及+/提高]
由于这道题的特殊性(所有边的边权都是1),所以我们可以只进行简单的BFS
由于要求最短路,所以当前在求的点\(i\)的上一个点在搜索树种一定是来自于上一层,不可能来自同一层,所以到点\(i\)的当前路径的长度只需要让上一层的那个点对他进行更新即可
再因为本题的\(ans\)要求的是到\(i\)点的最短路的个数,所以如果到点\(i\)的当前路径的长度等于上一层的每一个点的路径+1,那么这肯定是到点\(i\)的最短路
P1352 没有上司的舞会P1352没有上司的舞会[普及/提高-]
这是我第一次做有关树形DP的题目,因为题目难度不高,所以还是比较好想的
设\(f_{i0}\)是当第\(i\)个人不参加舞会时的\(max\),\(f_{i1}\)是他参加舞会时的\(max\)
根据题目所给到的关系,当一个结点(人)的父节点(领导)来的时候,这个人是不参加舞会的,所以对于\(i\)的下属\(j\)就有,\(\begin{cases} f_{i0}=max\{ f_{j0},f_{j1}\} \\ f_{i1}=a_i+f_{j0}\end{cases}\)
这里的\(a_i\)是每个人的欢乐值(结点的权值)
可以显然得到的是,上述柿子只有从根节点开始才能计算出对于每个节点的\(f_{i0} , f_{i1}\),从而才能算出对于根节点的\(f_{root0},f_{root1}\),最后\(ans=max\{f_{root0},f_{root1}\}\)即可
那么我们就需要找到\(root\)的编号,根据本题的特殊性,\(root\)结点即为没有上司的结点,在输入关系的时候我们用一个\(bool\)数组来标记即可,全部输入完毕之后,再根据标记来判断\(root\)
P1015 回文数P1015回文数[普及-]
其实做这道题的初衷是为了让橙题AC数量凑个整数
这道题其实按照题目的要求进行模拟即可,每次将一个数的位数正序与逆序相加,需要用到高精。对于大于10进制的情况,将其每一个用字母来表示的位对应的转化为一个十进制数即可
P1158 导弹拦截[NOIP2010PJ]P1158导弹拦截[NOIP2010PJ][普及/提高-]
看似这道题是和另外一道DP题重名,实际上这个题是一个排序+模拟,因为只有两个导弹系统,所以我们考虑用第一套拦截较小范围的,第二套拦截较大范围的
在用到第一套系统的距离进行排序,然后依次枚举即可
P1190 接水问题[NOIP2011PJ]这题就真的是老水题了,模拟一下接水过程即可
P1309 瑞士轮[NOIP2011PJ]P1309瑞士轮[NOIP2011PJ][普及/提高-]
这道题是一个很典型的归并排序
主要思路就是每次维护赢家和输家两个数组,然后在每次比赛之后进行归并
在最一开始使用sort排序一遍,然后每次比赛完之后merge即可
PS:STL中是有merge的:
merge函数的作用是:将两个已经排好序的序列合并为一个有序的序列
函数参数:merge(first1,last1,first2,last2,result,compare);
实际上就可以这样用:
inline bool cmp(int x,int y){return x<y;}
int a[114514],b[114514],c[114514];
...
merge(a+1,a+114514,b+1,b+114514,c+1,cmp);
P1982 小朋友的数字[NOIP2013PJ]
P1982小朋友的数字[NOIP2013PJ][普及+/提高]
我直接推荐第一篇题解
P1095 守望者的逃离[NOIP2007PJ]P1095守望者的逃离[NOIP2007PJ][普及/提高-]
能闪则闪,否则就走,若能力值够了就恢复,最后将本次的值进行比对,
看是这次 走 快还是 停下来恢复 或 闪 快
P2398 GCD SUM设\(f_i=\gcd(i,j)=k\)
\(g_k\)为能被k整除的\(\gcd(i,j)\)的个数
很明显就有\(g_k=\sum\limits_{t=1}^nf_{t*k}\),因此\(g_k=\lfloor\frac{n}{k}\rfloor^2\)(对于i有floor(n/k)种,对于j也一样)
P1390 公约数的和思路和上一题基本一致,最后答案输出时\(\frac{ans-k}{2}\)即可,其中\(k=\frac{n(1+n)}{2}\)
P1541 乌龟棋[NOIP2010TG]P1541乌龟棋[NOIP2010TG][普及+/提高]
很明显的一个DP题,且方程是比较好推的
由于题目中说了一共只有4种卡牌,且对于100%的数据:每种牌的数量都小于等于40
因此我们可以开4维数组,\(f_{xyzw}\)代表分别用x张1,y张2,z张3,和w张4所能得到的最大值
那么就可得出方程:
当然,前提是保证计算\(x-1,y-1,z-1,w-1\)时,对应的\(x,y,z,w\)都不为0
P3842 线段[TJOI2007]P3842线段[TJOI2007][普及/提高-]
DP,在这里是设置了二维的一个状态,\(f_{i,0}\)表示从第i行最左端开始走的最短路径长度,\(f_{i,1}\)则是到第i行最右端开始走的最短路径长度
那么除了第一行外,当前的从左端点开始走的最短的路径就是上一行的对应的左端点+上一行的线段的左端到这一行的线段的右端的长度+这一行的线段长度+1。或者是从上一行的右端点来(计算方法同理,将左端点改为右端点即可)。
当然,从右边开始同理。
那么状态转移方程就是这样的:
P2016 战略游戏
P2016战略游戏[普及/提高-]
一个最为基础的树形DP
通过观察样例我们可以发现:实际上只需要考虑对于某个节点,我们只需要考虑这个节点要不要放士兵即可
那么我们每次取放/不放的最小值即可
P1359 租用游艇P1359租用游艇[普及-]
树形DP,先存边,然后遍历n的上游和i的下游节点,比较路径长度即可
P1122 最大子树和P1122最大子树和[普及/提高-]
树形DP,先存边,然后进行两个DFS
P1747 好奇怪的游戏P1747好奇怪的游戏[普及/提高-]
BFS,做这道题的初衷是为了复习一下搜索,感觉自己快忘了
最一开始提交竟然WA,原来是BFS第二个时把BFS(X2,Y2)错写成了BFS(X2,Y1),草(一种植物+中日双语)
P1746 离开中山路P1746离开中山路[普及/提高-]
BFS,和上面那道题基本一致
简单的打了一遍模板,修改几个参数就好了(
P2615 幻方[NOIP2015TG]P2615幻方[NOIP2015TG][普及-]
不是吧2015年的D1T1就这么水
做题的初衷是为了完成任务
一眼知模拟,所以就按照条件简单做就行
因为数组表示起来不是很好想,直接放弃使用数组下标
选择用结构体,求每个数字的坐标,最后再赋值给数组以便输出,中间走样例炸了一次,是没做位置是否有数的判断,因为懒得再去大改,而且这题范围允许,就维护了一个bool数组
做的时候觉得应该能煺柿子,AC完一看题解,还真有公式啊
P2298 Mzc和男家丁的游戏P2298Mzc和男家丁的游戏[普及/提高-]
BFS,和前面的P1746思路基本一致,典型的迷宫+BFS,维护一个dis数组即可
但是分析的时候错误的打了个else导致我调了二十分钟???
P1332 血色先锋队P1332血色先锋队[普及/提高-]
看完题面第一反应:好!我是叛徒
BFS,但不完全是BFS板子,这是多起点多终点的
啊那就直接把起点全部压进队列去不就行了么
然后更新dis,最后按照顺序输出即可
然后我因为BFS函数没调用查了≈40min???
感谢!已经气懵了
P1141 01迷宫P1141 01迷宫[普及-]
别看这是一道普及-,这题可比前面的5道题强多了
首先输入需要用字符串,迷宫类问题常规操作,还行
然后这题如果直接按照输入数据一组一组的BFS的话最多拿70pts,会TLE三个点
那么我们考虑计算连通块,然后输出要查询的点所在的连通块的大小即可
P1162 填涂颜色P1162填涂颜色[普及-]
哦,又是一道普及-
这道题做法很多,我在这里考虑DFS
因为在题目当中0有两个意思,所以将他们换成不同的数字在进行分析
但是不能直接DFS,那样会把边缘误涂,应该先DFS一边边缘,再进行正常DFS,所以最一开始输入的是DFS(0,0)
P1683 入门P1683入门[普及-]
哦,双是一道普及-
这道题显然的DFS,甚至还不用回溯,找到起点直接DFS即可
CF414B Mashmokh and ACM洛谷:CF414B Mashmokh and ACM[普及/提高-]
CF:Codeforces Round #240(Div.1) ##B
搜索做累了,水一个DP
由于对于一个数而言,它的因数并不好枚举,所以在这里考虑倒退,即去推某个数的倍数
P1586 四方定理P1586四方定理[普及/提高-]
DP,状态很好想,是一个类似部分背包
由于是多组数据,可以先预处理,然后把输入的数据的f[n][1~4]加起来就行
AT1350 深さ優先探索AT1350 深さ優先探索[普及/提高-]
顾名思义,这是AtCoder的DFS模板题,锻炼一下DFS用的