题目链接:http://poj.org/problem?id=1942
解题思路:
对于一个 n*m 的表格,每一个合法的“画线图”都一定有 n 条横线和 m 条竖线,那么其实这个问题就可以看成在 n+m 个位置中安排 n 条横线和 m 条竖线,我们只要求出 n(或者m) 关于 n+m 的组合数即可得出答案[其实就是看成在 n+m 个位置中选出 n(或者 m)个位置的一个组合来放置横线(或者竖线),而另一种线的位置组合也随之确定]。
AC代码:
1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 5 int main() { 6 double n, m; 7 while (cin>>n>>m && (n!=0 || m!=0)) { 8 double down = min(n, m), up = n + m; 9 double ans = 1.0; 10 for (; down > 0; up-=1.0, down-=1.0) 11 ans *= (up / down); 12 ans += 0.5; //四舍五入解决精度问题 13 cout << (unsigned int)ans << endl; 14 } 15 16 return 0; 17 }