• hdu 3664 Permutation Counting


    题意:一个序列A的值为A[i]>i的个数,问给出n,m,使得n个数排列值为m的个数

    思路:dp,dp[i][j],相当于i个数价值为j,那么我是不是可以把第i个数放到第i个位置(即dp[i-1][j],还可以把i-1个数产生价值的位置和i换一下,价值不变(即dp[i-1][j]*j),还可以从dp[i-1][j-1]让那么不产生价值的位置和i换,价值+1

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

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 const ll mod=1e9+7;
     5 
     6 ll dp[1010][1010];
     7 
     8 int main(){
     9     for(int i=1;i<=1000;i++){
    10         dp[i][0]=1;
    11         for(int j=1;j<i;j++){
    12             dp[i][j]=(dp[i-1][j]+dp[i-1][j]*j%mod+dp[i-1][j-1]*(i-j)%mod)%mod;
    13         }
    14     }
    15     int n,m;
    16     while(~scanf("%d%d",&n,&m)){
    17         cout<<dp[n][m]<<endl;
    18     }
    19 }
  • 相关阅读:
    移动布局---1. 移动端布局基础
    1. CSS新特性之选择器
    1. H5新增语义化标签
    POJ 3281
    poj 1986
    POJ 3728
    poj 2763
    poj 2749
    uva 11294
    LA 3713
  • 原文地址:https://www.cnblogs.com/hhxj/p/7569656.html
Copyright © 2020-2023  润新知