CF351B Jeff and Furik(dp)

考虑dp,我们知道答案就是逆序对为0的期望步数。

对于一轮操作,有50%的可能逆序对不变,有50%的可能逆序对-2

对于这个状态方程进行化简就能得到答案

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pll;
const int N=9e6+10;
const int inf=0x3f3f3f3f;
int a[N];
double f[N];
int main(){
    ios::sync_with_stdio(false);
    int n;
    cin>>n;
    int i;
    for(i=1;i<=n;i++)
        cin>>a[i];
    int ans=0;
    int cnt=0;
    for(i=1;i<=n;i++){
        for(int j=1;j<i;j++){
            if(a[i]<a[j]){
                cnt++;
            }
        }
    }
    if(cnt%2){
        cnt--;
        f[cnt]=1;
    }
    else{
        f[cnt]=0;
    }
    for(i=cnt-2;i>=0;i-=2){
        f[i]=f[i+2]+4;
    }
    printf("%.6f
",f[0]);
    return 0;
}
View Code
没有人不辛苦,只有人不喊疼
原文地址:https://www.cnblogs.com/ctyakwf/p/13757468.html