HDU-3664 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}

题意:问n个数有多少种排列满足ai > i的个数为k个题解:    DP状态转移方程为dp[i][j]=dp[i-1][j]+dp[i-1][j]*j+dp[i-1][j-1]*(i-j);    dp[i][j]表示的是长度为i的数字串中有j个符合条件的。所以dp[i][j]=长度为i-1的数字串中符合条件的(新来的第i个数字直接连在末尾不改变E值)+长度为i-1的数字串中新来的第i个数字与前面任意一个符合条件的数交换,仍不改变E值,+长度为i-1的数字串中j-1个符合条件的,改变其中任意一个不符合条件的使其符合条件即可满足,而不符合条件的有(i-j)个,所以乘上i-j。    
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #define mod 1000000007
 6 using namespace std;
 7 typedef long long ll;
 8 const int maxn=1010;
 9 ll dp[maxn][maxn];
10 ll n,k;
11 int main()
12 {
13     for(ll i=1;i<=1000;i++)
14     {
15         dp[i][0]=1;
16         for(ll j=1;j<i;j++)
17         {
18             dp[i][j]=(dp[i-1][j]+dp[i-1][j]*j+dp[i-1][j-1]*(i-j))%mod;
19         }
20     }
21     while(~scanf("%lld%lld",&n,&k))
22     {
23         printf("%lld\n",dp[n][k]);
24     }
25 return 0;
26 }

错排:让N个数每个数的下标和本身都不一样

  原理:f[n]代表的是给你n个数全部错排的种数。f[n]=f[n-1]*(n-1)+f[n-2]*(n-1) f[n-1]表示这n-1个全部为错排,那么第n个和这n-1个任意一个交换都不改变前n个为错排的性质,即f[n-1]*(n-1) f[n-2]表示前这n-1个中有一个位置是正确的,那么正确的位置便有n-1种可能性,将n与这个正确的交换,便是f[n-2]*(n-1).


转载于:https://www.cnblogs.com/1013star/p/9549440.html

HDU-3664 Permutation Counting(DP)相关推荐

  1. HDU 3664 Permutation Counting

    Permutation Counting Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  2. HDU 3664 Permutation Counting(DP)

    题目链接 弱爆啦,组合弱爆了,反正是没想出来怎么搞这个题,其实这个公式不难推啊,反正就是没推出来.今天队内赛,实在是没办法了,暴力写了个DFS,先把10以内的打出表来,发现类似杨辉三角的一个表,推不出 ...

  3. jzoj6009. 【THUWC2019模拟2019.1.18】Counting (dp)

    Description 羽月最近发现,她发动能力的过程是这样的: 构建一个 V 个点的有向图 G,初始为没有任何边,接下来羽月在脑中构建出一个长度为 E 的边的序列,序列中元素两两不同,然后羽月将这些 ...

  4. 【HDU - 5965】扫雷(dp)

    题干: 扫雷游戏是晨晨和小璐特别喜欢的智力游戏,她俩最近沉迷其中无法自拔. 该游戏的界面是一个矩阵,矩阵中有些格子中有一个地雷,其余格子中没有地雷. 游戏中,格子可能处于己知和未知的状态.如果一个己知 ...

  5. HDU 6078 Wavel Sequence (dp)

    Description Have you ever seen the wave? It's a wonderful view of nature. Little Q is attracted to s ...

  6. hdu 1176 免费馅饼(DP)

    免费馅饼 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  7. hdu 1421 搬寝室 (dp)

    思路分析: dp[i][j] 表示选取到第 i 个   组成了 j 对的最优答案. 当然排序之后 选取相邻两个是更优的. if(i==j*2) dp[i][j] = dp[i-2][j-1] + w[ ...

  8. [HDU 6157]The Karting(DP)

    [HDU 6157]The Karting description solution 先用前缀和求出di:1→id_i:1\rightarrow idi​:1→i 的距离 前缀和满足:若在iii点进行 ...

  9. HDU 1422 重温世界杯 (dp)

    题目链接 Problem Description 世界杯结束了,意大利人连本带利的收回了法国人6年前欠他们的债,捧起了大力神杯,成就了4星意大利. 世界杯虽然结束了,但是这界世界杯给我们还是留下许多值 ...

  10. hdu 1503 Advanced Fruits(DP)

    题意: 将两个英文单词进行合并.[最长公共子串只要保留一份] 输出合并后的英文单词. 思路: 求最长公共子串. 记录路径: mark[i][j]=-1:从mark[i-1][j]转移而来. mark[ ...

最新文章

  1. java replaceall lt_static lt;Tgt; boolean replaceAll(Listlt;Tgt; list, T oldVal, T newVal)_Java...
  2. 无线呼叫服务器对码设置,楼层呼叫器对码方式种类
  3. WPF-003 popup实现下拉列表的问题
  4. [Swift]LeetCode556. 下一个更大元素 III | Next Greater Element III
  5. matlab字符串数组里里固定格式的内容,字符串数组和字符数组中的文本
  6. mac下的secureCRT.8的设置
  7. PostGreSql学习笔记001---PostgreSQL10.4安装(Windows)_支持PostGreGis_PostJDBC
  8. git 常见操作合集
  9. D - Maze(深度搜索+思维转换)
  10. python常用颜色表示_OpenCV+Python常用颜色空间
  11. java 多线程详细(转载)
  12. 2021-10-24 #1024 程序员的节日
  13. 关于Excel操作编写的一个软件设计构思案例[连载]
  14. LEDE+iKuai双软路由整合
  15. SQL Server 数据库之视图
  16. TP TN FP FN
  17. 今年努力在做的两件事
  18. 【uni-app】uni-app的基础知识
  19. Java 内部类详解
  20. RedisCluster redis集群配置

热门文章

  1. 29.2. Ubuntu
  2. .net敏捷开发及常用工具
  3. 【linux】16进制格式查看命令hexdump
  4. 创建模式--辛格尔顿
  5. Java中三层架构与MVC之间的显著区别
  6. 制作网页特效的基本步骤
  7. 修改MFC标题栏上的图标和修改MFC窗口标题(转)
  8. 在SharePoint Server 2007中创建定制的用户管理模块
  9. init与clinit 与 类的初始化顺序
  10. python2和python3的编码区别