题意:不好理解,但是总的来说就是,把m种数字填入n个位置,有多少种方法,而这题要求是的m为1到n的情况数的总和
思路:第二类string数,dp[i][j]表示i个位置j种数字,那么dp[i][j] = dp[i - 1][j] * j + dp[i][j - 1];
代码:
#include <cstdio>
#include <cstring>
const int N = 105;
int n;
double dp[N][N], sum[N];
int main() {
dp[1][1] = 1.0;
sum[1] = 1.0;
for (int i = 2; i < N; i++) {
for (int j = 1; j <= i; j++)
dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j] * j;
for (int j = 1; j <= i; j++)
sum[i] += dp[i][j];
}
while (~scanf("%d", &n) && n) {
printf("%d %.0lf\n", n, sum[n]);
}
return 0;
}