1. 程式人生 > 其它 >Codeforces - Little Elephant and Broken Sorting

Codeforces - Little Elephant and Broken Sorting

技術標籤:Codeforces動態規劃思維題

題目連結:Codeforces - Little Elephant and Broken Sorting


令 dp[i][j] 為 a[i] > a[j] 的概率。

然後對於每次交換:交換位置為x,y
dp[k][a] = dp[k][b] = ( dp[k][a] + dp[k][b] ) / 2
dp[a][k] = dp[b][k] = 1.0 - dp[k][a]
轉移很顯然。
最後 dp[a][b] = dp[b][a] = 0.5


AC程式碼:

#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h> //#define int long long using namespace std; const int N=1010; int n,m,a[N]; double dp[N][N],res; signed main(){ cin>>n>>m; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) dp[i][j]=1.0*(a[i]>a[j]); for(int i=1,a,
b;i<=m;i++){ cin>>a>>b; for(int j=1;j<=n;j++) dp[j][a]=dp[j][b]=(dp[j][a]+dp[j][b])/2, dp[a][j]=dp[b][j]=1.0-dp[j][a]; dp[a][b]=dp[b][a]=0.5; } for(int i=1;i<=n;i++) for(int j=i+1;j<=n;j++) res+=dp[i][j]; printf("%.10lf\n",res); return 0; }