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