zoukankan      html  css  js  c++  java
  • hdoj3664【DP】

    题意:
    有一种值E=the number of elements where ai > i.比如1 3 2 4,只有3位置是满足的,E=1。然后他会给你一个数组和一个k,问有多少个序列的E=k。
    思路:
    看到n和k都是1e3我觉得就应该想到n^2的复杂度上去,然后就是dp。不是说dp熟练,这就是一种解题思路的发现嘛,扯远了。。
    dp[i][j]表示前i个数的排列中E值为j的个数。处理dp[i][j]就是对于第i个,加进去,①如果就是放在最后dp[i][j]+=dp[i-1][j] 不变。②如果放到的地方是a[k]>k的还是不变。③如果放到不是a[k]>k的,那么就是+1;
    dp[i][j]+=dp[i-1][j]+dp[i-1][j]j+dp[i-1][j-1](i-j);
    题外话:
    感觉说起来还是有点难的,但是思路一旦明确,以及dp[i][j]的确立,状态转移,总体就偏简单了。自己在队里是挑DP的,要好好搞。。。
    PS:这里要打表

    #include <bits/stdc++.h>
    using namespace std;
    
    typedef long long LL;
    
    const int mod=1e9+7;
    const int N=1e3+10;
    
    LL dp[N][N];
    
    int main()
    {
        LL n,k;
        memset(dp,0,sizeof(dp));
        for(int i=0;i<=1000;i++)
            dp[i][0]=1;
    
        for(LL i=1;i<=1000;i++)
        {
            for(LL j=1;j<=i;j++)
                dp[i][j]=(dp[i-1][j-1]*(i-j)%mod+dp[i-1][j]*(j+1)%mod)%mod;
        }
        while(~scanf("%lld%lld",&n,&k))
            printf("%lld
    ",dp[n][k]);
        return 0;
    }
  • 相关阅读:
    BZOJ2565:最长双回文串
    BZOJ2342:[SHOI2011]双倍回文
    Redis数据库基础操作
    Celery异步任务框架
    Django框架之缓存数据库
    drf 分页器组件
    drf jwt认证组件
    drf三大认证组件
    Django框架之RBAC+ContentType
    Django框架之admin管理后台
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/5934816.html
Copyright © 2011-2022 走看看