代码如下 #include <bits/stdc++.h> using namespace std; const int dx[]={0,0,1,-1}; const int dy[]={1,-1,0,0}; char s[10]; int mp[66000],state[5][5],st[5][5],ed[5][5],e; int get_hash(int a[5][5]){ int tot=0,p=1; for(int i=1;i<=4;i++) for(int j=1;j<=…
传送门 思路 博客半年没更新了,来更新个博文吧 在\(dsr\)聚聚博客的帮助下,我用半个上午和一个中午的时间苟延残喘地完成了这道题 先是读题目读大半天,最后连个样例都看不懂 之后又是想思路,实在想不出来,便去看了\(dsr\)学长的博客,发现是一道区间\(DP\)题 我们用\(f[i][j][k]\)来表示\(i\).\(j\)这个区间能否压缩成为\(k\)这个字符 基本框架为 枚举长度len 枚举起点i 计算终点j 枚举中点k 起点到中点的check 中点到终点的check 转移 字符不多,…
P4289 [HAOI2008]移动玩具 双向bfs+状态压缩+记忆化搜索 双向bfs用于对bfs的优化,每次找到可扩展节点少的一边进行一次bfs,找到的第一个互相接触的点即为最短路径 矩阵范围仅4*4大小,我们容易想到用二进制数压缩其状态,利于求解. 既然转成二进制,大小又<2^17,那么可以再加数组进行记忆化 不要忘了起点终点相同时的特判qwq #include<iostream> #include<cstdio> #include<queue> #inclu…
洛谷P1120:https://www.luogu.org/problemnew/show/P1120 思路 明显是搜索题嘛 但是这数据增强不是一星半点呐 我们需要N多的剪枝 PS:需要先删去超出50的木棍 首先我们可以想到枚举每个小木棍的长度来搜索 但是直接枚举肯定会超时的 所以我们想到优化剪枝 因为要组成木棍肯定要从被砍开的木棍中的最大值开始枚举到所有木棍总和长(只有一根木棍被砍开) 然而这样却还不是最优的剪枝 因为每根原始小木棍的长度一样 所以枚举长度的时候可以判断是否被总和整除 而且我们…
洛谷题目传送门 我实在是太弱了,第一次正儿八经写背包DP,第一次领会如此巧妙的容斥原理的应用...... 对每次询问都做一遍多重背包,显然T飞,就不考虑了 关键就在于每次询问如何利用重复的信息 我这么弱,当然是想不到容斥原理的啦 暂且先当成完全背包,每种硬币可使用无限次,预处理\(f\)数组,\(f[i]\)等于买价值\(i\)的东西的总方案数 然后就要从中减去不合法的.首先肯定会有一种硬币超额使用,第\(j\)中硬币等于说强制选了\(d_j+1\)个,剩下的依然随便选,那么第 \(j\)种硬币…
洛谷P1731:https://www.luogu.org/problemnew/show/P1731 思路 三重剪枝 当前表面积+下一层表面积如果超过最优值就退出 当前体积+下一层体积如果超过总体积就退出 假设剩余所有的体积都用来做下一层那么此时下一层的体积是最大 而半径会最大 从而表面积最小(定理:当体积一定时 半径越大 表面积越小) 每次枚举半径和高时 是从下一层的半径和高到还剩下的层数 因为每层都要比下面大1 代码 #include<iostream> #include<cmat…
洛谷P3195 bzoj1010 设s数组为C的前缀和 首先$ans_i=min_{j<i}\{ans_j+(i-j-1+s_i-s_j-L)^2\}$ (斜率优化dp)参考(复读)https://www.cnblogs.com/orzzz/p/7885971.html 设j不比k劣,则$ans_j+(i-j-1+s_i-s_j-L)^2 <= ans_k+(i-k-1+s_i-s_k-L)^2$ 化简,与i相关的放到一边,(由于要除法,设$k+s_k-j-s_j>0$) 得$2(i+s…
关于dfs dfs伪代码: void dfs(s){ for(int i=0;i<s的出度;i++){ if(used[i]为真) continue; used[i]=1; dfs(i); } return; } 统计无向图的连通分量 显然,你在洛谷上是搜不到这题的,因为这是我们学校团队的题.所以还是找个小板凳专心听我讲吧. 题目描述: 给定无向图G(V,E),请统计G中连通分量的数量. 连通分量:结点V的一个子集V',保证V'中任意两点间都有路径 需要在主循环中进行多次dfs 输入输出格式:…
关于bfs: 你怎么会连这个都不知道!!!自己好好谷歌一下!!!(其实我也刚学) bfs伪代码: while(队列非空){ 取出队首元素u; 弹出队首元素; u染色为黑色; for(int i=0;i<u的出度){ if(i非白色) continue; u的第i个出线连着的点入队; i染为灰色; } } 可爱的分割线 无权最短路 显然,你在洛谷上是搜不到这题的,因为这是我们学校团队的题.所以还是找个小板凳专心听我讲吧. 题目描述: 给定无权无向图G(V,E)和源点s/终点t,求 s->t 的最…
正解:状压 解题报告: 先,放下传送门QwQ 说真的我jio得这题不管是思路还是实现上,都还是有一定难度的?然后就看到神仙hl博客里一句"太水了不讲了"就过掉了,,,好的趴太强辽QAQ 但是这题我开始是真的没想到状压,,,知道状压之后实现代码实现了好久,,,看来灵巧是真的菜趴QAQ 然后就讲下这题QwQ 首先这题,一眼bfs板子题嘛,大体的框架应该都还是想得出来的 但是如果!你和sd灵巧想到了一个路子上!直接存的矩阵!你就可以获得10pts的好成绩,,,显然会MLE的啊喂! 然后就考虑…