「 HDU P3555 」 Bomb】的更多相关文章

# 题目大意 给出 $\text{T}$ 个数,求 $[1,n]$ 中含 ‘49’ 的数的个数. # 解题思路 求出不含 '49' 的数的个数,用总数减去就是答案. 数位 $DP$,用记忆化来做. 设 $dp[i][0]$ 表示 (这里按照从左往右数) 长度为 $i$ 并且最后一位不是 '4' 的数的个数. 设 $dp[i][1]$ 表示长度为 $i$ 并且最后一位是 '4' 的数的个数. 上面这两行看不懂可以先跳过去,是不是很神奇. 这样单说不好说.借助代码来说.具体的看代码里的注释. # 放…
\(\mathcal{Description}\)   Link.(HDU 裂开了先放个私链 awa.)   在一个 \(n\times n\) 的方格图中,格子 \((i,j)\) 有权值 \(w_{i,j}\),现可将一些不相邻的格子染黑,并保证白格子在四联通意义下存在哈密顿回路,方案的价值为染色格子权值之和.求方案的最大价值.   \(n\le10\),数据组数 \(T\le30\). \(\mathcal{Solution}\)   Emmm...插头 DP 写得太少了,这题还算比较常规…
\(\mathcal{Description}\)   link.   给定一个 \(n\) 个结点 \(m\) 条边的无向图,\(q\) 次操作每次随机选出一条边.问 \(q\) 条边去重后构成生成树的方案总数,对 \(p\) 取模. \(\mathcal{Solution}\)   首先求出 \(n-1\) 条边构成生成树的方案数,显然矩阵树定理.   接着,令 \(f(i,j)\) 表示操作 \(i\) 次,去重后有 \(j\) 条边的方案数.那么有: \[f(i,j)=jf(i-1,j)…
题目链接 Mirror and Light 题意 一条直线代表镜子,一个入射光线上的点,一个反射光线上的点,求反射点.(都在一个二维平面内) 题解 找出入射光线关于镜子直线的对称点,然后和反射光线连边,与镜子的交点即是所求点. 用这题来测测板子.然后wa了一下,因为没注意要保留3位小数.这种输出错误要多注意啦,类似最近忘记加Case #x的错误- -||. 代码 #include <cstdio> #include <cmath> #include <algorithm>…
题意 给定\(n\)个炸弹,每个炸弹的坐标与代价与影响范围给定,炸弹会引爆影响范围内其他所有炸弹.求引爆所有炸弹的最小代价. 分析 先做\(n^2\)的循环,然后建图,对\(i\)能引爆\(j\)建边\((i,j)\).然后对这个图求强连通分量并缩点,构成新的有向无环的森林.定义每个强连通分量的cost为其中包含的点的最小cost,然后把新森林中所有入度为0的点的cost加起来求和即可(由于无环,所以从任何入度不为0的点往回走,必然终止于一个入度为0的点). 代码 #include <iostr…
# 题目大意 对于一个数 $x$,它的每一位数字分别是 $A_{n}A_{n-1}A_{n-2}\cdots A_{2}A_{1}$,定义其权重 $f(x)=\sum_{i=1}^{n}\left(A_i\times 2^{i-1}\right)$. 现在给定两个数 $A,B$ 求出 $[0,B]$ 中满足 $f(i)\le f(A)$ 的数的个数. # 解题思路 数位 $\text{DP}$. 我一开始设的状态是 $dp[i][j]$ 表示到第 $i$ 位,并且现在已经枚举到的数位的权重是 $…
# 解题思路 记忆化搜索 一个点可以跳到的点,取决于它现在的能量.而且有一个显而易见的性质就是一条可行路径的终点和起点的横坐标之差加上纵坐标之差肯定小于等于起点的能量. 因为跳到一个点之后,能量和之前的点就已经没有关系了,只与现在的点有关,所以不需要传递能量到下一层. 嗯,思路就是酱紫的 # 附上代码 #include <iostream> #include <cstring> #include <cstdio> using namespace std; const i…
和 HDOJ 3555 一样啊,只不过需要多判断个 ‘4’ 我有写 3555 直接去看那篇吧 这里只放代码 #include <iostream> #include <cstring> #include <cstdio> using namespace std; ], dp[][]; inline int dfs(int l, bool flag, bool limit) { ) ; if(!limit && dp[l][flag]) return dp…
题目大意 给出一个长度为 $n$ 的字符串 $s$ 要求你求出 $s$ 的每一个前缀在 $s$ 中出现的次数之和.$n\le 200000$. 解题思路 暴力的对每一个前缀进行一次匹配,求出出现次数后求和. 那肯定是不行的,复杂的是 $O(n\times (m+n))$ 的,不用想也知道要 TLE 那我们考虑 $KMP$ 中 $next$ 数组的性质:为每一个前缀的前缀和后缀最长的共同子串的长度. 那这不就是说如果 $next[i] = j$ 的话,那么在 $s$ 中 $1\rightarrow…
首先关于分层图思想详见2004的这个论文 https://wenku.baidu.com/view/dc57f205cc175527072208ad.html 这道题可以用状态压缩,我们对于每一把钥匙的状态只有两种,获得了或者没有获得,然后就可以用二进制方法表示,例如一共有5把钥匙,我们如果用二进制数01001表示当前状态,就意味着我们已经拥有了第一类钥匙,第四类钥匙(从右往左看),然后我们就可以把此时的状态压缩为一个int了,节省了很多的空间,具体的操作就用位运算实现. 然后就是简单粗暴的df…