[SMOJ1779]一笔画

题目描述

由于小毛同学智商不高,理解不了真正的一笔画问题,于是他就开始研究一种变形的一笔画问题。给出 n m 列的点阵,每个点是一个字符: “.” 或 “#” ,其中“#”表示该点是障碍物。现在小毛的问题是: 他最少要画多少笔才能把点阵里所有的“.”都覆盖完毕(被小毛画到的点就会被覆盖)。小毛的笔有点奇怪:小毛每次只能在某一行或某一列画,小毛当然想一笔就把某一行或某一列画完,但很遗憾,在任何时候都不允许小毛画的那一段点阵含有障碍物。还有一点更奇怪: 已经被画过的点,不能重复被画。

输入格式 1779.in

第一行: n , m 表示点阵行数和列数 。 0<n,m10
接下来有 n 行, 每行有 m 个字符,“.” 或 “#”

输出格式 1779.out

一个整数, 小毛最少要画多少笔。

输入样例 1779.in

输出样例一:
2 4
.##.
….
输出样例二:
3 4
….
….
….

输出样例 1779.out

输出样例一:
3
输出样例二:
3


这题实在是很考验思维能力,“透过现象看本质”。

最初我是完全没有考虑到 DP 的做法,而是采用了贪心策略,每次取当前可以填充最多格子的一笔来画,可以得到 75 分。然而,后面无论怎样调整贪心策略,始终不能得到更高的分数。这表明贪心策略确实是不可行的。

讲评的时候,我才意识到,这题与铺地砖一题有相似之处。但是又有种植玉米的特点,即自身会有一部分限制。而且本题求的不是方案数,而是最少步数。

那么我们不妨设 f[i][state] 表示把前 i 行填满,其中第 i 行的状态为

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值