题目:
给你一块M*N的巧克力,问把它切成最小单元需要最少切几刀,分开的就不能一起切了.
分析:
每次切割只能多产生一个部分,分成M*N个部分,必然要切M*N-1刀.
一个长为m宽为n的长方形和m*n个单位为1的正方形的面积相等,可知一个长方形变成m*n个正方形,面积是一直没变,
所以可以不用考虑面积对结果的影响,只需考虑刀数的影响;
切一刀一个就变两个,所以一个长方形变成m*n个正方形(边长为1)至少需要切m*n-1刀
代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <fstream>
#include <cmath>
#include <ctime>
#include <cstdlib>
#include <algorithm>
#include <set>
#include <map>
#include <list>
#include <stack>
#include <queue>
#include <iterator>
#include <vector> using namespace std; #define LL long long
#define MOD 1000000007
#define INF 0x3f3f3f3f
#define MAXN 10000010
#define MAXM 1000010 int main()
{
int n, m;
while(scanf("%d%d", &n, &m)!= EOF&&n&&m)
{
printf("%d\n", n*m-);
} return ;
}