• HDU


    Permutation Counting

    Given a permutation a1, a2, … aN of {1, 2, …, N}, we define its E-value as the amount of elements where ai > i. For example, the E-value of permutation {1, 3, 2, 4} is 1, while the E-value of {4, 3, 2, 1} is 2. You are requested to find how many permutations of {1, 2, …, N} whose E-value is exactly k.

    InputThere are several test cases, and one line for each case, which contains two integers, N and k. (1 <= N <= 1000, 0 <= k <= N). 
    OutputOutput one line for each case. For the answer may be quite huge, you need to output the answer module 1,000,000,007.Sample Input

    3 0
    3 1

    Sample Output

    1
    4
    
    
            
     

    Hint

    There is only one permutation with E-value 0: {1,2,3}, and there are four permutations with E-value 1: {1,3,2}, {2,1,3}, {3,1,2}, {3,2,1}


    数列1-n,可以随意排列组合,求恰有k个a[i]>i的排列个数。
    一道找规律的dp。看数据范围就知道不能暴力求解,但可以用暴力找出n较小的几种小数列排列数,发现规律。类似杨辉三角,就像两数和靠拢,于是可以发现状态转移方程f[i][j]=(((i+1)*f[i][j-1])%MOD+((j-i)*f[i-1][j-1])%MOD)%MOD

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<string>
    #include<math.h>
    #include<queue>
    #include<set>
    #include<stack>
    #include<algorithm>
    #include<vector>
    #include<iterator>
    #define MAX 1005
    #define INF 0x3f3f3f3f
    #define MOD 1000000007
    using namespace std;
    
    typedef long long ll;
    
    ll f[MAX][MAX];
    
    int main()
    {
        int n,m,i,j;
        for(i=1;i<=1000;i++){
            f[0][i]=1;
        }
        for(i=1;i<=1000;i++){
            for(j=i+1;j<=1000;j++){
                f[i][j]=(((i+1)*f[i][j-1])%MOD+((j-i)*f[i-1][j-1])%MOD)%MOD;
            }
        }
        while(~scanf("%d%d",&n,&m)){
            if(n==m){
                printf("0
    ");
                continue;
            }
            printf("%lld
    ",f[m][n]);
        }
        return 0;
    }
     
  • 相关阅读:
    js函数调用模式
    js闭包和回调
    js原型
    oracle sql优化笔记
    shell脚本学习
    程序与资源管理
    vi/vim学习
    压缩和解压缩
    用户及用户组
    万用字符和特殊字符
  • 原文地址:https://www.cnblogs.com/yzm10/p/8808837.html
Copyright © 2020-2023  润新知