传送门:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1968
比赛的时候懒得读,没想到是这么一个简单的dp
就一个插空选择的递推。
和HDU3664不同的是,3664是替换,位置1到i的替换,新加的可放在最后
不管是插空还是替换,保证是全概率事件即可。注意3664替换第一个和插空到第一个空是一个情况。
dp[i][j]为i个数E值为j的个数:
1.插在开头
2.插到逆序对中间
3.插到非逆序对中间
4.插到最后
无非就是上面四种情况乘与当前情况的个数
#include <iostream> #include <string> #include <queue> #include <map> #include <algorithm> #include <cstring> #include <cstdio> #include <vector> #include <queue> #define eps 1e-8 using namespace std; typedef long long LL; const int maxn = 100+10; int dp[maxn][maxn]; void init() { for(int i = 1; i < maxn; i++) { dp[i][0]=1; for(int j = 1; j < i; j++) { dp[i][j] = (dp[i-1][j] + dp[i-1][j-1] + dp[i-1][j]*j + dp[i-1][j-1]*(i-1-j))%1001113; } } } int main() { init(); int T; cin>>T; while(T--) { int a,b,c; scanf("%d%d%d",&a,&b,&c); printf("%d %d ",a,dp[b][c]); } return 0; }