Chinaunix首页 | 论坛 | 博客
  • 博客访问: 381368
  • 博文数量: 715
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 5005
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 14:46
文章分类

全部博文(715)

文章存档

2011年(1)

2008年(714)

我的朋友

分类:

2008-10-13 16:31:09

终于有了blog--却不知道该写点什么——因为我也是新手,怕说错、写错东西,误了和我一样的和比我更新的新手(高手?怎么会被我糊弄呢),误人而后误己,业精于勤,吾且先闻道之

◇想起来曾经有个问题一直没想通,顺便拿出来让大家指点指点:P
※问题:将1000个相同小球放入10个相同容器内,有多少种放法?(每个容器至少放1个球) .球都是一样的没有区别,容器也是一样的没有区别:=>比如当6个一样的球放到3个一样的容器里,就只有(1,1,4),(1,2,3),(2,2,2)共3种放法(其它的都与此相重复).
附代码:(有人做了,但是其过滤重复的方法我没看懂)
#include
#include
#include
#include
const int N = 10;
const int M = 1000;
__int64 a[M+1][N+1];
int main()
{
 int i,j,k;
    memset(a,0,sizeof(a));
 for(i=1; i<=M - N + 1; i++)
 {
  a[i][0] = 1;
  for(j=1; j+i<=M; j++)
  {
   for(k=0;k       a[i+j][k+1] +=a[j][k];//就这句看不懂
  }
 }
 while(1)
 {
  printf("输入n,m,(0,0)标识表示结束,分别代表球数和容器数\n");
  scanf("%d%d",&i,&j);
  if(i==0)
   break; 
  printf("放法种数:\n%I64u\n",a[i][j-1]);
 }
 return 0;
}
//程序先计算<1000球及<10容器的情况,利用前面的计算结果计算后面的结果〈动态规划存储算法〉

--------------------next---------------------

阅读(135) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~