摘要:
这道题与 数独 几乎完全相同,只是需要计算靶形得分,可以直接使用一个 $9\times 9$ 的矩阵,如下代码 #include<bits/stdc++.h> using namespace std; const int num[9][9]={ {6,6,6,6,6,6,6,6,6}, {6,7,7 阅读全文
摘要:
破坏正方形 首先计算出火柴总数和正方形总数。 考虑横着的火柴有 $n+1$ 行,每行有 $n$ 根,竖着的同理(旋转 $90°$),所以一共有 $2n(n+1)$ 根火柴。 边长为 $1$ 的正方形有 $n^2$ 个,$2,(n-1)^2;3,(n-2)^2;\dots;n,1^2$,$\sum_{ 阅读全文
摘要:
排书 此题使用 $IDA*$ 解决。首先是一个迭代加深的 dfs,然后判断条件里是类似于 $A*$ 的条件,如果当前的估价 $+$ 当前的实际花费 $\ge$ 答案就可以返回了。 这里比较显然,无需证明,比 $A*$ 的证明简单。 考虑统计中间八个格子中的众数 $x$。由于每次最多移入一个数,移出一 阅读全文
摘要:
排书 此题使用 $IDA*$ 解决。首先是一个迭代加深的 dfs,然后判断条件里是类似于 $A*$ 的条件,如果当前的估价 $+$ 当前的实际花费 $\ge$ 答案就可以返回了。 这里比较显然,无需证明,比 $A*$ 的证明简单。 考虑每次都会更改如上图所示的三个数的后继关系,所以每次最多消除 $3 阅读全文
摘要:
k短路 这道题考察的还是 $A*$ 算法。 首先考虑设立估价函数:当前点到终点的最短路(因为从当前点到终点的所有路径中最短路最短,一定满足 $\le$)。只需要在反向图上做一遍 dijkstra 就能求得。 然后考虑证明第 $i$ 次弹出的就是第 $i$ 短路。类似 $A*$ 中的证明。 #incl 阅读全文