• HDU 2512 一卡通大冒险


    我感觉这更像个数学问题。

    dp[i][j]表示将i件物品分成j组的方案数。

    状态转移方程:

    dp[i][j] = dp[i-1][j-1] + j * dp[i-1][j];

    将i张卡分成j组可以有之前两种情况得来:i-1张卡分成j-1组,只要将第i张卡独立分成一组就行了,或者是i-1张卡分成j组,第i张卡随便插入哪一组都符合条件。

     1 //#define LOCAL
     2 #include <iostream>
     3 #include <cstdio>
     4 #include <cstring>
     5 using namespace std;
     6 
     7 const int maxn = 2005;
     8 int dp[maxn][maxn];
     9 
    10 int main(void)
    11 {
    12     #ifdef LOCAL
    13         freopen("2512in.txt", "r", stdin);
    14     #endif
    15 
    16     int i, j;
    17     for(i = 1; i <= 2000; ++i)
    18     {
    19         dp[i][1] = 1;
    20         dp[i][i] = 1;
    21     }
    22     for(i = 2; i <= 2000; ++i)
    23         for(j = 2; j < i; ++j)
    24             dp[i][j] = (dp[i-1][j-1] + j * dp[i-1][j]) % 1000;
    25 
    26     int n, num, sum;
    27     scanf("%d", &n);
    28     while(n--)
    29     {
    30         scanf("%d", &num);
    31         sum = 0;
    32         for(i = 1; i <= num; ++i)
    33             sum = (sum + dp[num][i]) % 1000;
    34         printf("%d
    ", sum);
    35     }
    36     return 0;
    37 }
    代码君
  • 相关阅读:
    overlapped
    overlapped编程
    Oracle DB 使用子查询来解决查询
    OCP-1Z0-051-V9.02-132题
    OCP-1Z0-051-V9.02-131题
    OCP-1Z0-051-V9.02-130题
    OCP-1Z0-051-V9.02-129题
    OCP-1Z0-051-V9.02-128题
    OCP-1Z0-051-V9.02-127题
    OCP-1Z0-051-V9.02-126题
  • 原文地址:https://www.cnblogs.com/AOQNRMGYXLMV/p/3871458.html
Copyright © 2020-2023  润新知