终于有了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) |