UVA10970 Big Chocolate
[Problem]
- 给你一块 n×m 的巧克力和一把刀,你要用刀把这个巧克力分成 n×m 个 1×1 的小块,但是一刀不能看两个巧克力,请问你最少需要砍几刀?
- 多组数据。1≤n,m≤300。
[Soluntion]
这是一道思维题。据我所知,有两种思考的方法。
-
感性的思考。
一刀可以把巧克力分成两块,两刀可以把巧克力分成三块,三刀可以把巧克力分成四块……以此类推,t 刀可以把巧克力分成 t+1 块。
所以,要把巧克力分成 n×m 块,就需要 n×m−1 刀,直接输出即可满分。
-
比较理性的思考。
先横着切还是先竖着切,还是横竖相交的切,需要的刀数都是一样的。所以我们可以这样考虑:
先考虑把巧克力分成 m 个 n×1 的小块,这需要 m−1 刀。再把这 m 个小块各自分成 1×1 的巧克力,每个小块需要 n−1,所以总的刀数为:
(m−1)+(n−1)×m=m−1+(n−1)×m=(n−1+1)×m−1=n×m−1
直接输出,马上满分。
[code]