zoukankan      html  css  js  c++  java
  • [HDOJ2512]一卡通大冒险(DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2512

    给一个数n,问1~n这n个数内的划分。设dp(i,j)为i划分为j个集合时有多少个。

    初始化条件  dp[0][0] = 1,并且所有的i划分和1划分都为1。

    i个数划分为j个集合与j-1个集合无关系,所以dp(i,j-1)对dp(i,j)没有贡献,考虑dp(i-1,j-1)和dp(i-1,j)。

    递推式:dp(i,j)=dp(i-1,j-1)+dp(i-1,j)*j

     1 #include <algorithm>
     2 #include <iostream>
     3 #include <iomanip>
     4 #include <cstring>
     5 #include <climits>
     6 #include <complex>
     7 #include <fstream>
     8 #include <cassert>
     9 #include <cstdio>
    10 #include <bitset>
    11 #include <vector>
    12 #include <deque>
    13 #include <queue>
    14 #include <stack>
    15 #include <ctime>
    16 #include <set>
    17 #include <map>
    18 #include <cmath>
    19 
    20 using namespace std;
    21 
    22 //kirai
    23 const int maxn = 2222;
    24 const int mod = 1000;
    25 int dp[maxn][maxn];
    26 int n;
    27 
    28 int main() {
    29     // freopen("in", "r", stdin);
    30     int T;
    31     scanf("%d", &T);
    32     while(T--) {
    33         scanf("%d", &n);
    34         memset(dp, 0, sizeof(dp));
    35         dp[0][0] = 1;
    36         for(int i = 1; i <= n; i++) {
    37             dp[i][1] = 1;
    38             dp[i][i] = 1;
    39         }
    40         for(int i = 1; i <= n; i++) {
    41             for(int j = 1; j <= n; j++) {
    42                 dp[i][j] = (dp[i-1][j-1] + dp[i-1][j] * j) % 1000;
    43             }
    44         }
    45         for(int i = 1; i < n; i++) {
    46             dp[n][n] = (dp[n][n] + dp[n][i]) % mod;
    47         }
    48         printf("%d
    ", dp[n][n]);
    49     }
    50     return 0;
    51 }
  • 相关阅读:
    iOS学习之MVC,MVVM,MVP模式优缺点
    iOS学习之单例模式
    iOS学习之观察者模式
    iOS学习之设计模式
    iOS学习之SKTagView的使用
    iOS学习之cocoaPods
    iOS学习之git的使用
    iOS学习之block
    [学习笔记]一个实例理解Lingo的灵敏性分析
    爬虫实例(二)——爬取某宝评论
  • 原文地址:https://www.cnblogs.com/kirai/p/5400481.html
Copyright © 2011-2022 走看看