【DP】【Asia - Harbin - 2010/2011】【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.

 

Input

There are several test cases, and one line for each case, which contains two integers, N and k. (1$ \le$N$ \le$1000, 0$ \le$k$ \le$N).

 

 

Output

Output one line for each case. For the answer may be quite huge, you need to output the  answer module 1,000,000,007.

Explanation for the sample:

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}

 

 

Sample Input

3 0 
3 1

 

Sample Output

1 
4

【个人体会】一开始在YY能不能找到规律直接能算出答案,然后还打了一个暴力算出了10以内的情况,
后来发现找不出来,于是才回归正道。联想到全错位排列的递推方式,立马懂了这题其实就是个DP。

【题目解析】假设我已经求出了N-1个数,其中ai>i为K个的总方案数。那么考虑添加N这个元素进去
,现在N正好放在第N位上面,那么此时是的排列正好属于DP[N][K],然后将这个元素和之前的ai>i的
元素进行交换,一共是K种交换,得到的方案数都是属于DP[N][K],因此DP[N][K]+=DP[N-1][K]*(K+1),
另外一种是将元素N和ai<=i的元素进行交换,这样的话就会多出1个ai>i的元素(即N这个元素)。因此
DP[N][K]+=DP[N-1][K-1]*(N-1-(K-1))

【代码如下】

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 typedef long long int64;
 6 
 7 const int64 mod = 1000000007;
 8 
 9 int64 F[1001][1001], N, K;
10 
11 int64 Dp(int64 n, int64 k)
12 {
13     if (F[n][k]) return F[n][k];
14     if (n == 0 || n == k) return 0;
15     if (k == 0) return 1;
16     int64 t1 = Dp(n - 1, k) * (k + 1) % mod, t2 = Dp(n - 1, k - 1) * (n - k) % mod;
17     int64 tmp = (t1 + t2) % mod;
18     F[n][k] = tmp;
19     return tmp;
20 }
21 
22 int main()
23 {
24     while (cin >> N >> K) cout << Dp(N, K) << endl;
25     return 0;
26 }
 

 

 

 

转载于:https://www.cnblogs.com/GXZC/archive/2012/12/31/2840498.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/260123.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三丰三坐标编程基本步骤_三丰三坐标CRYSTA APEX S776

日本三丰MITUTOYO从1934年成立至今&#xff0c;专力致于精密测量仪器的研发和生产&#xff0c;在七十多年中&#xff0c;日本三丰量具MITUTOYO已成为世界最大综合测量仪器的制造商&#xff0c;它生产的产品包括千分尺&#xff0c;卡尺&#xff0c;千分表&#xff0c;高度尺&…

oracle的文件后缀名,转:数据文件的扩展名是ora,dbf,dat的,有什么区别?

只是通过扩展名来标识文件的类型而已&#xff0c;对于数据文件不管是ora/dat/dbf&#xff0c;都是一样的&#xff0c;没有什么区别。.dbf-数据文件&#xff0c; .tmp-临时文件&#xff0c;.log-重作日志文件(redo log file)&#xff0c; .ctl-控制文件.ora-参数文件&#xff0c…

Unity3D研究院之Android同步方法读取streamingAssets

版本Unity5.3.3 Android 小米pad1 首先非常感谢 守着阳光 同学在下面的留言。让我解决了一个大的谜团。。 开始我知道 StreamingAssets 路径是这个 path “jar:file://” Application.dataPath “!/assets/”; 文档在这里&#xff1a; http://docs.unity3d.com/Manual/Strea…

Codeforces Round 261 Div.2 D Pashmak and Parmida's problem --树状数组

题意&#xff1a;给出数组A&#xff0c;定义f(l,r,x)为A[]的下标l到r之间&#xff0c;等于x的元素数。i和j符合f(1,i,a[i])>f(j,n,a[j])&#xff0c;求有多少对这样的(i,j). 解法&#xff1a;分别从左到右&#xff0c;由右到左预处理到某个下标为止有多少个数等于该下标&…

JQuery AJAX提交中文乱码的解决方案

$.post(doSearch.action, {page : page,vip : vip,searchType : searchType,subtype : subtype,type : type,contentType: "application/x-www-form-urlencoded; charsetutf-8", keyword : keyword}, function(data) //回传函数{var val;}); 解决这个中文乱码问题&am…

列举ospf的5种报文类型_危险品货物各种包装类型以及装箱技巧

对于危险货物来说&#xff0c;其危险性的大小除与货物的本身性质有关外&#xff0c;还与货物的包装方式密切相关。因而&#xff0c;危险货物进箱条件的确定&#xff0c;也必须考虑到货物的包装方法。一、集装箱内径20GP内径&#xff1a;长5.8M*宽2.34M*高2.34M40GP内径&#xf…

linux一行多个命令行,如何在一行中运行多个Linux命令

对于每个Linux管理员来说&#xff0c;熟练使用各种命令行是他们的特性。但对于普通用户来说&#xff0c;可能还是有难度&#xff0c;您需要继续练习Linux命令&#xff0c;并找到使该任务更有效的方法。实现这个特定目标的一种方法是学习一些技巧&#xff0c;这些技巧可以提高发…

Java 数组基础

数组 数组&#xff08;Array&#xff09;&#xff1a;相同类型数据的集合。 定义数组 方式1&#xff08;推荐&#xff0c;更能表明数组类型&#xff09; type[] 变量名 new type[数组中元素的个数]; 比如&#xff1a; int[] a new int[10]; 数组名&#xff0c;也即引用a&…

车辆跟驰模型matlab代码实现_MATLAB——考虑驾驶员特性及前车速度的快速路模型...

重发一下之前误删的一篇~目前大多数元胞自动机模型并没有考虑前车速度&#xff0c;大多数同向行驶的模型中车辆都是处在一个完全跟车的状态&#xff0c;无论前车是加速还是减速&#xff0c;后车驾驶者都只是根据自己的车速判断是减速跟驰还是变换车道来寻求寻求更合理的行驶状态…

linux nc命令

参考 :http://www.linuxso.com/command/nc.html NC 全名 Netcat (网络刀)&#xff0c;作者是 Hobbit && ChrisWysopal。因其功能十分强大&#xff0c;体积小巧而出名&#xff0c;又被大家称为“瑞士军刀”。nc - TCP/IP swiss army knife nc 常用于溢出、反向链接、上传…

收藏一些自己认为好的网站或博客

月光博客 seo每天一贴 虎嗅网 李岩的博客 中邮阅读网&#xff0c;专门看电子期刊的&#xff0c;很不错的免费阅读期刊网。 seay web安全技术博客: http://www.cnseay.com 陆陆续续编辑中... 转载于:https://www.cnblogs.com/caoyuanzhanlang/archive/2013/01/05/2846086.html

shell 判断字符串相等_编程小短文:Bash子字符串还在用==?试试=~性能瞬间飙升100倍...

引言Bash 是 Linux 系统下钦定的 shell。你可以通过cat /etc/shells查看当前系统支持的 shell 种类。Bash 不但是系统管理员与内核交互的利器&#xff0c;且是一种语言&#xff0c;可以编写大多数系统的自动化脚本&#xff0c;用于简化运维工作。今天我们学习一个知识点&#x…

linux系统联网命令,Linux系统常用的网络命令及使用方法

Linux系统常用的网络命令及使用方法Linux是一套免费使用和自由传播的类Unix操作系统&#xff0c;是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。下面小编整理了Linux系统常用的网络命令及使用方法&#xff0c;希望对大家有帮助!1、pingping命令工作在O…

Xss Csrf 简介

一、Js在web的执行环境 1.直接触发 •在HTML页中插入<script></script>脚本标记。JS嵌入到HTML中的两种方式&#xff1a; •1&#xff09;直接嵌入<script>标签 <script language“javascript”> document.write(“hello world!”); </script> •…

Cracking the Coding Interview 5.2

Given a(decimal -e.g. 3.72)number that is passed in as a string, print the binary representation. If the number can not be represented accurately in binary, print "ERROR" 整数部分&#xff1a; 对2取余&#xff0c;然后向右移动一位&#xff0c;重复直到…

python的render函数_带函数return的Flask render_模板

TL&#xff1b;DR在这种情况下&#xff0c;我想我会选择使用我现在的4个选项我将介绍4种选择&#xff0c;其中一些可能比其他更可行。在如果您担心execute表示的代码存在代码重复(DRY)&#xff0c;您可以简单地定义一个两个路由都可以调用的函数&#xff1a;def execute():# ex…

Google开源Leak Finder——用于检测内存泄漏的JavaScript工具

近日&#xff0c;Google开源了Leak Finder&#xff0c;这款工具可以查看JavaScript应用的堆&#xff0c;进而发现内存泄漏。 作为一门垃圾收集语言&#xff0c;JavaScript并不会出现常见的内存泄露情况&#xff0c;特别是像C等语言中所见到的那种。但如果依旧将内存分配给那些不…

linux 定时访问文件夹,Linux定时同步文件夹

-v, --verbose 详细模式输出-q, --quiet 精简输出模式-c, --checksum 打开校验开关&#xff0c;强制对文件传输进行校验-a, --archive 归档模式&#xff0c;表示以递归方式传输文件&#xff0c;并保持所有文件属性&#xff0c;等于-rlptgoD-r, --recursive 对子目录以递归模式处…

windows apache 开启 GZIP

从服务端优化来说&#xff0c;通过对服务端做压缩配置可以大大减小文本文件的体积&#xff0c;从而使加载文本的速度成倍的加快。目前比较通用的压缩方法是启用gzip压缩。它 会把浏览器请求的页面&#xff0c;以及页面中引用的静态资源以压缩包的形式发送到客户端,然后在客户端…

python必备插件_5框酷毙的python插件工具

展开全部工欲善其事必先利其器&#xff0c;一个好的工具能让起到事半功倍32313133353236313431303231363533e59b9ee7ad9431333433646531的效果&#xff0c;Python社区提供了足够多的优秀工具来帮助开发者更方便的实现某些想法&#xff0c;下面这几个工具给我的工作也带来了很多…