题目网址:https://www.luogu.com.cn/problem/P1074 大意就是在一个9*9的数独中填数,要求行列宫都是九个互不相同的数字,给定一定的得分机制,要求求解最大得分.思路大致从零最少的行开始搜索(试想现实中你做数独一定是这样的方法),然后只要将0位置的信息保存,总数就是深度值.按照优先搜索的顺序逐个填写,为了节省计算资源,在搜索之前就预处理0位置的相关信息. #include<bits/stdc++.h> using namespace std; typedef u…
题目链接:https://www.luogu.com.cn/problem/P1378 题目中给出矩形的长宽和一些点,可以在每个点放油滴,油滴会扩展,直到触碰到矩形的周边或者其他油滴的边缘,求出剩余面积的最小值,就是求油滴面积的最大值.策略是dfs加上回溯,暴力求解. 代码如下: #include<bits/stdc++.h> using namespace std; typedef unsigned int ui; typedef long long ll; typedef unsigned…
题面 Description 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z博士请教,Z 博士拿出了他最近发明的"靶形数独" ,作为这两个孩子比试的题目. 靶形数独的方格同普通数独一样,在 9 格宽×9 格高的大九宫格中有 9 个 3 格宽×3 格高的小九宫格(用粗黑色线隔开的) .在这个大九宫格中,有一些数字是已知的,根据这些数字,利用逻辑推理,在其他的空格上填入 1到 9 的数字.…
[洛谷P3809][模板]后缀排序 题目大意: 对于给定的长度为\(n(n\le10^6)\)的字符串求后缀数组\(sa[i]\). 思路: 倍增+快排构造后缀数组.代码参考<挑战程序设计竞赛>.时间复杂度\(\mathcal O(n\log^2n)\). 源代码: #include<cstdio> #include<cstring> #include<algorithm> const int N=1e6+1; char s[N]; int n,k,sa[N…
[洛谷4005]小Y和地铁(搜索) 题面 洛谷 有点长. 题解 首先对于需要被链接的两个点,样例中间基本上把所有的情况都给出来了. 但是还缺了一种从下面绕道左边在从整个上面跨过去在从右边绕到下面来的情况(从反过来是一样的) 然后把所有方法分类之后发现实际上只有\(4\)种决策. 而\(4\)种决策中,两两一组,可以发现对于后面结果的影响是相同的, 那么只需要贪心的考虑选择两种决策的较优值. 所以只剩下两种方法了,直接爆搜+最优性剪枝,拿个二进制什么的状压一下计算贡献, 时间复杂度\(O(2^{n…
洛谷P1074:https://www.luogu.org/problemnew/show/P1074 思路 这道题一看就是DFS 打一个分数表方便后面算分 我用x y z数组分别表示行 列 宫 是否有放置数字 用cnt结构体中no和zero分别表示每行行号和每行的零的数量(下面会讲到为什么) 我们把每行按照零的数量从小到大排序 并保留行号来计算(因为搜索的层数与每行0的个数有关) 我们用一个队列q表示有几个点要枚举 然后我们从零最少的那行开始枚举就ok了 PS:ans一开始要赋值为-1 因为有…
题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序列2 4 6 1 3 5来描述,第i个数字表示在第i行的相应位置有一个棋子,如下: 行号 1 2 3 4 5 6 列号 2 4 6 1 3 5 这只是跳棋放置的一个解.请编一个程序找出所有跳棋放置的解.并把它们以上面的序列方法输出.解按字典顺序排列.请输出前3个解.最后一行是解的总个数. //以下的话来自usaco官方…
科比的比赛(题解)(贪心+搜索) 标签:算法--贪心 阅读体验:https://zybuluo.com/Junlier/note/1301158 贪心+搜索 洛谷题目:P2460 [SDOI2007]科比的比赛 也可以贪心+网络流+状压dp 这道题其实真的不是很难的 为什么一直没有人做(其实我也是看到科比才进来的...) 入正题吧 思路一:贪心 爆搜肯定过不了对吧 看一下题目,发现这个\(m\)好大八大 再仔细看一下题目,发现\(n\)给的很舒服啊 于是有一个大胆的想法:复杂度和\(n\)有关,…
题目来源:洛谷P3953 思路 先用SPFA求一遍最短路 在求最短路的同时可以把所有点到终点的最短路求出来 dis数组 注意要反向SPFA  因为从起点开始可能会走到一些奇怪的路上导致时间负责度增加 我们定一个f[u][k]数组为从当前节点u还剩时间k到达终点的方案 原来从u走到终点的最短路径消耗时间为dis[u] 而我们现在考虑走(u,v,w)这条边(不是最短路) 那么比走最短路需要多dis[v]+w-dis[u]的时间 所以f[u][k]=∑f[v][k-(dis[v]+w-dis[u])]…
[已知先序.中序求后序排列]--字符串类型 #1049 : 后序遍历 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho在这一周遇到的问题便是:给出一棵二叉树的前序和中序遍历的结果,还原这棵二叉树并输出其后序遍历的结果. 提示:分而治之--化大为小,化小为无 输入 每个测试点(输入文件)有且仅有一组测试数据. 每组测试数据的第一行为一个由大写英文字母组成的字符串,表示该二叉树的前序遍历的结果. 每组测试数据的第二行为一个由大写英文字母组成的字符串,表示该二叉树的…