CSU 1968 Permutation Descent Counts
2017-07-24 08:32
405 查看
http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1968
题意:
对于任一种N的排列A,定义它的E值为序列中满足A[i]>A[i+1]的数的个数。给定N和K(K<=N<=1000),问N的排列中E值为K的个数。
思路:
这道题目和杭电的3664非常像。
d【i】【j】表示分析到i这个数时的E值为j的个数。
那么如何计算出d【i】【j】呢?得根据d【i-1】【j】和d【i-1】【j-1】递推出来。
①首先考虑d【i-1】【j】(此时不改变E值):
1)、因为此时i是最大的,所以插在最后不改变E值,方法数为1
2)、插入到每对逆序数中间,这样逆序数数量不会改变,方法数为j(因为一共有j对逆序对)
②然后是d【i-1】【j】(此时要让E值+1)
1)、插入到最前面,E值+1,方法数为1
2)、插入到不是逆序对中去,构成逆序对,E值+1,(i-1的数中一共有i-2对数,现在存在j-1对逆序对,那么i-2-j+1对数不是逆序对,可以插入到这几对数当中去),方法数为i-j+1
所以,最后的递推式就是
题意:
对于任一种N的排列A,定义它的E值为序列中满足A[i]>A[i+1]的数的个数。给定N和K(K<=N<=1000),问N的排列中E值为K的个数。
思路:
这道题目和杭电的3664非常像。
d【i】【j】表示分析到i这个数时的E值为j的个数。
那么如何计算出d【i】【j】呢?得根据d【i-1】【j】和d【i-1】【j-1】递推出来。
①首先考虑d【i-1】【j】(此时不改变E值):
1)、因为此时i是最大的,所以插在最后不改变E值,方法数为1
2)、插入到每对逆序数中间,这样逆序数数量不会改变,方法数为j(因为一共有j对逆序对)
②然后是d【i-1】【j】(此时要让E值+1)
1)、插入到最前面,E值+1,方法数为1
2)、插入到不是逆序对中去,构成逆序对,E值+1,(i-1的数中一共有i-2对数,现在存在j-1对逆序对,那么i-2-j+1对数不是逆序对,可以插入到这几对数当中去),方法数为i-j+1
所以,最后的递推式就是
dp[i][j] = dp[i-1][j-1]*(i-j) + dp[i-1][j]*(j+1);
#include<iostream> #include<algorithm> #include<cstring> #include<cstdio> #include<sstream> #include<vector> #include<stack> #include<queue> #include<cmath> #include<map> #include<set> using namespace std; typedef long long ll; typedef pair<int,int> pll; const int INF = 0x3f3f3f3f; const int maxn = 100 + 5; const int mod=1001113; int dp[200][200]; void init() { for(int i=0;i<=100;i++) dp[i][0]=1; for(int i=2;i<=100;i++) { for(int j=1;j<i;j++){ dp[i][j]=(dp[i-1][j-1]*(i-j)+dp[i-1][j]*(j+1))%mod; } } } int main() { int T; int t,n,k; init(); //freopen("in.txt","r",stdin); scanf("%d",&T); while(T--) { scanf("%d%d%d",&t,&n,&k); printf("%d %d\n",t,dp [k]); } return 0; }
相关文章推荐
- Permutation Descent Counts CSU 1968 (动态规划)
- csuoj 1968 递推
- next_permutation的简单应用HDU1207
- csu 1335 高桥和低桥(树状数组+二分)
- find all the permutation of a string
- LeetCode刷题笔录Permutation Sequence
- 【NOIP模拟题】Permutation(dp+高精度)
- next_permutation原理剖析
- Leetcode Permutation2
- 【DFS】 CSU 1513 Kick the ball!
- CSU 1267: Operation(模拟啊 )
- csu 1346: 变色龙
- [leetcode 60] Permutation Sequence
- Batch Gradiant Descent: The Tradeoff Between Converge Threshold and Training Set Capacity
- Leetcode -- Permutation Sequence
- CSU 1092 Barricade
- CSU 1506: Double Shortest Paths(最小费用流)(湖南省第十届省赛)
- LeetCode之Next Permutation
- Flipping Parentheses(CSU1542 线段树)
- CSU 1532 JuQueen 线段树 lazy 区间最值