找回密码
 欢迎注册
查看: 38316|回复: 12

[讨论] 一个简单的计数问题

[复制链接]
发表于 2009-7-27 13:45:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
十六个不同高度的人前后排成四排,每排四人,要求后面的比前面高,左边的比右边的高,问你有几种排法?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-7-27 14:22:29 | 显示全部楼层
如果有这样的两个要求的话,估计只有一种排列方法。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-7-27 14:25:50 | 显示全部楼层
............................ 4个数两排,就有2种排列了
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-7-27 14:39:43 | 显示全部楼层
本帖最后由 nlrte13 于 2009-7-27 14:55 编辑 我算的结果是 24024 种排列
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-7-27 15:02:54 | 显示全部楼层
14 * 13 * 12 * 11
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-7-27 15:14:38 | 显示全部楼层
2*2的方块有 2*1 种 3*3的有 7*6种 4*4的有 14*13*12*11种 5*5的有 23*22*21*20种 6*6的有 34*33*32*31*30*29种 …………
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-7-27 16:42:27 | 显示全部楼层
本帖最后由 数学星空 于 2009-7-27 16:44 编辑 6# nlrte13 不知是否是编程计算出来的?? 若计算无误,通过观察可得到(设f(n)为满足上题条件的n*n方阵数目) $f(2n)=prod_{k=0}^{2n-1}(4n^2-2n-1+k)$ $f(2n+1)=prod_{k=0}^{2n-1}(4n^2+2n+k)$
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-7-27 16:51:10 | 显示全部楼层
http://www.research.att.com/~nja ... =0&language=english
  1. #include <map>
  2. using namespace std;
  3. #define M 5
  4. class key{
  5. int d[M];
  6. public:
  7. key(int v[M]){
  8. int i;
  9. for(i=0;i<M;i++)d[i]=v[i];///non-increasing sequence required.
  10. }
  11. bool operator<(const key& k)const{
  12. int i;
  13. for(i=0;i<M;i++){
  14. if(d[i]<k.d[i])return true;
  15. if(d[i]>k.d[i])return false;
  16. }
  17. return false;
  18. }
  19. bool operator==(const key& k)const{
  20. int i;
  21. for(i=0;i<M;i++){
  22. if(d[i]!=k.d[i])
  23. return false;
  24. }
  25. return true;
  26. }
  27. const int *getData()const{return d;}
  28. };
  29. map<key, long long> the_map;
  30. long long calc(int d[M])
  31. {
  32. int e[M];
  33. map<key, long long>::iterator it;
  34. it=the_map.find(d);
  35. long long c;
  36. if(it==the_map.end()){
  37. int i;
  38. for(i=0;i<M;i++){
  39. e[i]=d[i];
  40. }
  41. c=0;
  42. for(i=0;i<M-1;i++){
  43. if(e[i+1]<e[i]){
  44. e[i]--;
  45. c+=calc(e);
  46. e[i]++;
  47. }
  48. }
  49. if(e[M-1]>0){
  50. e[M-1]--;
  51. c+=calc(e);
  52. e[M-1]++;
  53. }
  54. the_map.insert(pair<key,long long>(d,c));
  55. }else{
  56. c=it->second;
  57. }
  58. return c;
  59. }
  60. int _tmain(int argc, _TCHAR* argv[])
  61. {
  62. int d[M];
  63. int i;
  64. d[0]=1;
  65. for(i=1;i<M;i++)d[i]=0;
  66. the_map[d]=1LL;
  67. for(i=0;i<M;i++)d[i]=M;
  68. printf("%lld\n",calc(d));
  69. return 0;
  70. }
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-7-27 17:25:46 | 显示全部楼层
本帖最后由 数学星空 于 2009-7-27 17:33 编辑 呵呵,真不可思议,表达式太复杂了 $f(n)={(n^2)!}/{prod_{k=1}^{2n-1}k^(n-|n-k|)}$
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-7-27 17:51:27 | 显示全部楼层
呵呵,真不可思议,表达式太复杂了 f(n)={(n^2)!}/{prod_{k=1}^{2n-1}k^(n-|n-k|)} 数学星空 发表于 2009-7-27 17:25
咳。。。你真能搞 - -# 我发现我的算式不对^^ 不过4*4的结果还是对的,哈哈
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-12-22 14:38 , Processed in 0.030117 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表