HDU-3664 Permutation Counting(DP)
HDU-3664 Permutation Counting
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)相关推荐
- HDU 3664 Permutation Counting
Permutation Counting Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- HDU 3664 Permutation Counting(DP)
题目链接 弱爆啦,组合弱爆了,反正是没想出来怎么搞这个题,其实这个公式不难推啊,反正就是没推出来.今天队内赛,实在是没办法了,暴力写了个DFS,先把10以内的打出表来,发现类似杨辉三角的一个表,推不出 ...
- jzoj6009. 【THUWC2019模拟2019.1.18】Counting (dp)
Description 羽月最近发现,她发动能力的过程是这样的: 构建一个 V 个点的有向图 G,初始为没有任何边,接下来羽月在脑中构建出一个长度为 E 的边的序列,序列中元素两两不同,然后羽月将这些 ...
- 【HDU - 5965】扫雷(dp)
题干: 扫雷游戏是晨晨和小璐特别喜欢的智力游戏,她俩最近沉迷其中无法自拔. 该游戏的界面是一个矩阵,矩阵中有些格子中有一个地雷,其余格子中没有地雷. 游戏中,格子可能处于己知和未知的状态.如果一个己知 ...
- 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 ...
- hdu 1176 免费馅饼(DP)
免费馅饼 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- hdu 1421 搬寝室 (dp)
思路分析: dp[i][j] 表示选取到第 i 个 组成了 j 对的最优答案. 当然排序之后 选取相邻两个是更优的. if(i==j*2) dp[i][j] = dp[i-2][j-1] + w[ ...
- [HDU 6157]The Karting(DP)
[HDU 6157]The Karting description solution 先用前缀和求出di:1→id_i:1\rightarrow idi:1→i 的距离 前缀和满足:若在iii点进行 ...
- HDU 1422 重温世界杯 (dp)
题目链接 Problem Description 世界杯结束了,意大利人连本带利的收回了法国人6年前欠他们的债,捧起了大力神杯,成就了4星意大利. 世界杯虽然结束了,但是这界世界杯给我们还是留下许多值 ...
- hdu 1503 Advanced Fruits(DP)
题意: 将两个英文单词进行合并.[最长公共子串只要保留一份] 输出合并后的英文单词. 思路: 求最长公共子串. 记录路径: mark[i][j]=-1:从mark[i-1][j]转移而来. mark[ ...
最新文章
- java replaceall lt_static lt;Tgt; boolean replaceAll(Listlt;Tgt; list, T oldVal, T newVal)_Java...
- 无线呼叫服务器对码设置,楼层呼叫器对码方式种类
- WPF-003 popup实现下拉列表的问题
- [Swift]LeetCode556. 下一个更大元素 III | Next Greater Element III
- matlab字符串数组里里固定格式的内容,字符串数组和字符数组中的文本
- mac下的secureCRT.8的设置
- PostGreSql学习笔记001---PostgreSQL10.4安装(Windows)_支持PostGreGis_PostJDBC
- git 常见操作合集
- D - Maze(深度搜索+思维转换)
- python常用颜色表示_OpenCV+Python常用颜色空间
- java 多线程详细(转载)
- 2021-10-24 #1024 程序员的节日
- 关于Excel操作编写的一个软件设计构思案例[连载]
- LEDE+iKuai双软路由整合
- SQL Server 数据库之视图
- TP TN FP FN
- 今年努力在做的两件事
- 【uni-app】uni-app的基础知识
- Java 内部类详解
- RedisCluster redis集群配置