0w1

UVA 10970 Big Chocolate ( 數學水題 )

UVa Online Judge
給一個 n * m的巧克力,問最少要切幾刀才能全部變成 1 * 1的巧克力,一次只能切在一塊的整數線上。
直覺上把巧克力變成 n條 m個巧克力的條或 m條 n個巧克力的條不會比縱橫亂切差,簡化一下代數又發現這兩種都必須要切 n * m - 1次。。如果有人知道比較嚴謹的證明請留言告訴我,謝謝。
追記:數學家的22個思考工具裡有提到一模一樣的題目,把原本的巧克力視為一堆,因為每次分割必然恰好增加一堆,且全部各自變成1*1就是要成為n * m個堆,顯然必須要分割n * m - 1次。

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 300 + 2;
const int MAXM = 300 + 2;

int main(){
    int n, m;
    while( scanf("%d%d", &n, &m) == 2 ){
        printf("%d\n", n * m - 1);
    }
    return 0;
}