H. NAND
题意
给一个真值表,问最少使用多少个二输入与非门能够实现这个真值表的功能。
题解
初始值
- $15 - 00001111$
- $51-00110011$
- $85-01010101$
用一个 $vector$ 表示当前具有的表达式,每次 $dfs$ 都选取两个做与非运算,加入队列再继续 $dfs$ ,有以下几个剪枝
- 标记 $vector$ 中的元素,避免重复加入
- $dfs$ 的参数传入上一次的选取的两个值的下标,每次只取上一次右边的数
代码
1 | int ans[256]; |
J. Square
题意
给你一个 $n*n(n\le8)$ 的棋盘,上面有一些格子必须是黑色。其它可以染黑或者染白。对于一个棋盘,定义它的优美度为它上面最大的连续白色子正方形的边长,对于每个 $0\le k\le n$,问有多少种染色方案使得棋盘的优美度为 $k$ ?
题解
将问题转化为求优美度小于 $k$ 的染色方案, $dp[i][sta]$ 表示第 $i$ 行状态为 $sta$ 的方案数,状态为一个 $k$ 进制数,第 $j$ 位表示区间 $j\sim j+k-1$ (每行下标从 $0$ 开始)往上延伸都为白色的最大高度,接下来枚举每行的染色方案。
代码
1 | ull ans[10]; |
K. Colorful Toy
题意
给 $N$ 个点,$M$ 条边,用 $C$ 种颜色给点染色,其中图形旋转后相同的染色方案只算一种,求有多少种不同的染色方案。
题解
因为给的点都是整数点,图形只有在旋转 $90^\circ 180^\circ,270^\circ$ 时才可能与原图重合,旋转方案只有四种。
代码
1 | struct Point{ |