找回密码
 欢迎注册
查看: 23326|回复: 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 ... mp;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-5-8 00:05 , Processed in 0.050164 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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