• BZOJ 4321: queue2( dp )


    dp(i, j, 1)表示前i个, 有j对是不合法的, i和i-1是在一起的.

    dp(i, j, 0)表示前i个, 有j对是不合法的, i和i-1不在一起的.

    转移我们只需考虑是多了一对不合法的还是少了一对不合法的, 或者是不变, 考虑当前i和i-1,i-2的位置的影响就可以了.

    dp(i, j, 1) = 2*dp(i-1, j-1, 0) + dp(i-1, j-1, 1) + dp(i-1, j, 1)

    dp(i, j, 0) = (i-j-2)*dp(i-1, j, 0) + (j+1)*dp(i-1, j+1, 0) + (i-j-1)*dp(i-1,j,1) + j*dp(i-1, j+1, 1) 

    这道题貌似还有递推式.... 

    ---------------------------------------------------------------------------------

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
     
    using namespace std;
     
    typedef long long ll;
     
    const int maxn = 1009;
    const int MOD = 7777777;
     
    int dp[2][maxn][2], N;
     
    inline void upd(int &x, int t) {
    if((x += t) >= MOD)
    x -= MOD;
    }
     
    int main() {
    scanf("%d", &N);
    int c = 0, p = 1;
    memset(dp[c], 0, sizeof dp[c]);
    dp[c][0][0] = 1;
    for(int i = 2; i <= N; i++) {
    swap(c, p);
    memset(dp[c], 0, sizeof dp[c]);
    for(int j = 0; j < i; j++) {
    dp[c][j][1] = dp[p][j][1];
    if(j) {
    upd(dp[c][j][1], dp[p][j - 1][0]);
    upd(dp[c][j][1], dp[p][j - 1][0]);
    upd(dp[c][j][1], dp[p][j - 1][1]);
    }
    dp[c][j][0] = (ll(dp[p][j + 1][0]) * (j + 1) + ll(j) * dp[p][j + 1][1]) % MOD;
    if(i >= j + 2)
    upd(dp[c][j][0], (ll(dp[p][j][0]) * (i - j - 2) + ll(dp[p][j][1]) * (i - j - 1)) % MOD);
    }
    }
    printf("%d ", dp[c][0][0]);
    return 0;
    }

    ---------------------------------------------------------------------------------

    4321: queue2

    Time Limit: 10 Sec  Memory Limit: 128 MB
    Submit: 104  Solved: 54
    [Submit][Status][Discuss]

    Description

    n 个沙茶,被编号 1~n。排完队之后,每个沙茶希望,自己的相邻的两
    人只要无一个人的编号和自己的编号相差为 1(+1 或-1)就行; 
    现在想知道,存在多少方案满足沙茶们如此不苛刻的条件。 

    Input

    只有一行且为用空格隔开的一个正整数 N,其中 100%的数据满足 1≤N ≤ 1000; 

    Output

    一个非负整数,表示方案数对 7777777 取模。   

    Sample Input

    4

    Sample Output

    2
    样例解释:有两种方案 2 4 1 3 和 3 1 4 2

    HINT

    Source

  • 相关阅读:
    NOP(4) default
    NOP(三) ASP.NET Application Life Cycle
    About the IoC
    开园庆祝!
    js 添加/删除数组开头/结尾元素
    JavaScript String.prototype.slice()
    JavaScript Array.prototype.splice()方法的使用
    js Map
    js Set
    Bruteforce Algorithm [HDU 3221]
  • 原文地址:https://www.cnblogs.com/JSZX11556/p/5082507.html
Copyright © 2020-2023  润新知