NOJ-(strling数)

来源:互联网 发布:去广告软件adsafe 编辑:程序博客网 时间:2024/06/16 15:33

  • [1379] 小球划分

  • 时间限制: 1000 ms 内存限制: 65535 K
  • 问题描述
  • 将N个不同的小球分成若干组,问总共有多少总分法
  • 输入
  • 包含多组数据,每行一个数n,表示共有n个小球。(1≤x≤1000).
  • 输出
  • 对每组数据,输出一行:不同的方法数,因为这个数可能非常大,我们只需要它除以10000的余数。
  • 样例输入
  • 123
  • 样例输出
  • 125
  • 提示
  • 来源
  • Lucifer




第二类strling数

用来解决i个东西放入J个盒子中,有多少种不同的方法.


公式是

s[i][1] = 1;

s[i][i] = 1;


s[i][j] = s[i - 1][ j - 1] + J * s[i - 1][j];


这是我写的代码,

开始写错的原因就是没有注意得出的s[i][j]没有取余数

贴出代码:

#include <stdio.h>#include <string.h>#include <iostream>#include <string>using namespace std;int s[1111][1111];int ans[1111];int main(){for (int i = 1; i < 1001; i++){s[i][0] = 0;}s[1][1] = 1;ans[1] = 1;for (int i = 2; i <= 1001; i++){int res = 0;for (int j = 1; j <= i; j++){if (i == j || j == 1){s[i][j] = 1;}else{s[i][j] = s[i - 1][j - 1] + j * s[i - 1][j]; }s[i][j] %= 10000;res += s[i][j];}ans[i] = res % 10000;}int x;while (scanf("%d", &x) != EOF){printf("%d\n", ans[x]);}return 0;}

这是标称的

#include <sstream>#include <iostream>#include <iomanip>#include <cstdio>using namespace std; #define M 10000#define MAXN 1005int f[MAXN][MAXN];int res[MAXN]; int main(){    int i,l;    f[1][1]=1;    res[1]=1;    for(i=2;i<=1000;i++)    {        f[i][1]=1;        f[i][i]=1;        res[i]=2;        for(l=2;l<i;l++)        {            f[i][l]=f[i-1][l-1]+f[i-1][l]*l;            f[i][l]%=M;            res[i]+=f[i][l];        }        res[i]%=M;    }    for (int i = 1; i <= 200; i++)    {cout << res[i] << endl;}    int n;    while(cin>>n)    {        cout<<res[n]<<endl;    }    return 0;}


原创粉丝点击