hdu3664 Permutation Counting

题目传送门

题意:

在一个序列中,如果有k个数满足a[i]>i;那么这个序列的E值为k,问你

在n的全排列中,有多少个排列是恰好是E值为k的序列?

思路:

定义dp[i][j]: 在 i 的全排列中,E值为j的个数;则从i转移到i+1时,有三种情况:

1)把i+1加到最后,E值不变;

2)把i+1与那些已经满足a[i]>i的数交换,E值不变;

3)把i+1与那些不满足a[i]>i的数交换,E值加一。

根据上面得到的转移方程为:

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

代码:

#include<iostream>
#include<string.h>
#include<algorithm>
#include<stdio.h>
#include<math.h>
#include<queue>
#include<stack>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long long ll;
typedef pair<int,int> PII;
#define mod 1000000007
#define pb push_back
#define mk make_pair
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
//head
#define N 1001
ll dp[N][N];
int n,k;
int main()
{
for(int i=;i<=;i++)//注意这里的i只能到1000,不然会超时
{
dp[i][]=;
for(int j=;j<i;j++)
{
dp[i][j]=(dp[i-][j]+dp[i-][j]*j+dp[i-][j-]*(i-j))%mod;
}
}
while(~scanf("%d %d",&n,&k))
{
printf("%lld\n",dp[n][k]);
}
return ;
}

最新文章

  1. 大数据系列(4)——Hadoop集群VSFTP和SecureCRT安装配置
  2. 关于XE10下Indy发送字符串编码的问题
  3. WebKit技术内幕
  4. 1.Windows安装PostgreSQL
  5. sqlserver 链接 ODBC 访问 MySql
  6. 一些站点使用的服务器软件、js 框架大收集 [ 整理中 ]
  7. IOS设计模式之一(MVC模式,单例模式)
  8. Linux Shell编程(6)——变量替换
  9. Qt Style Sheets帮助文档 Overview
  10. HDU 3478 Play with Chain (Splay树)
  11. PHP 将MySQL数据导出csv
  12. deepin Gtk-WARNING **: 无法在模块路径中找到主题引擎:“adwaita”
  13. C#常用工具类——Excel操作类(ZT)
  14. Mac下,如何把项目托管到github
  15. C# 根据部分属性来判断俩个对象是否相同
  16. keepalived高可用系列~通用基础
  17. VS Code中Matlab插件安装设置
  18. TFS撤销其他人的迁出
  19. WPF之ListView使用WrapPanel
  20. VB 中窗口发现冲突名称,将使用名称...怎么解决?

热门文章

  1. MiniUI学习笔记1-表单控件
  2. 升级docker至最新版本
  3. 解决SVN异常 cleanup failed
  4. md5sum 计算和校验文件的md5值
  5. CSS3 Animations
  6. java selenium常用API汇总
  7. css 表单头部固定
  8. mybaties数据源配置类型(POOLED、JNDI、UNPOOLED)
  9. ES集群health为yellow解决办法
  10. PHP截取字符串函数,根据dede修改而来