• CF258D Little Elephant and Broken Sorting (带技巧的DP)


    题面

    $ solution: $

    这道题主要难在考场上能否想到这个思路(即如何设置状态)(像我这样的蒟蒻就想不到呀QAQ)不过这一题确实很神奇!

    $ f[i][j]: $ 表示第 $ a_i $ 个数比第 $ a_j $ 个数大的几率,这样设置状态比较好转移:对于每一次 $ a_i $ 与 $ a_j $ 的交换,他只会影响到序列里,每一个数与 $ a_i $ , $ a_j $ 的胜率(一共有 $ n $ 次交换,只要每次交换复杂度在 $ O(n) $ 级别这道题就解决了了)。而且我们不难发现转移时每一个数与 $ a_i $ , $ a_j $ 胜率的修改是 $ O(1) $ 的:

    1. $ f[i][j]=(f[i][j]+f[j][i]) imes 0.5 $
    2. $ f[j][i]=(f[i][j]+f[j][i]) imes 0.5 $

    所以把数列中每一位修改后复杂度刚好为 $ O(n) $ 级别,满足要求!

    $ code: $

    #include<iostream>
    #include<cstdio>
    #include<iomanip>
    #include<algorithm>
    #include<cstring>
    #include<cstdlib>
    #include<ctime>
    #include<cmath>
    #include<vector>
    #include<queue>
    #include<map>
    #include<set>
    
    #define ll long long
    #define db double
    #define inf 0x7fffffff
    #define rg register int
    
    using namespace std;
    
    int n,m;
    int a[1001];
    db ans,f[1001][1001];
    
    
    inline int qr(){
    	char ch;
    	while((ch=getchar())<'0'||ch>'9');
    	int res=ch^48;
    	while((ch=getchar())>='0'&&ch<='9')
    		res=res*10+(ch^48);
    	return res;
    }
    
    int main(){
    	//freopen("inversion.in","r",stdin);
    	//freopen("inversion.out","w",stdout);
    	n=qr(),m=qr();
    	for(rg i=1;i<=n;++i)a[i]=qr();
    	for(rg i=1;i<=n;++i)
    		for(rg j=i+1;j<=n;++j){
    			if(a[i]>a[j])f[i][j]=1;
    			if(a[j]>a[i])f[j][i]=1;
    		}
    	for(rg k=1,i,j;k<=m;++k){
    		i=qr(),j=qr();
    		for(rg k=1;k<=n;++k){
    			if(i!=k&&j!=k){
    				f[k][i]=f[k][j]=(f[k][i]+f[k][j])*0.5;
    				f[i][k]=f[j][k]=(f[j][k]+f[i][k])*0.5;
    			}
    		}f[i][j]=f[j][i]=(f[i][j]+f[j][i])*0.5;
    	}
    	for(rg i=1;i<=n;++i)
    		for(rg j=i+1;j<=n;++j)
    			ans+=f[i][j];
    	printf("%.8lf",ans);
    	return 0;
    }
    
    
  • 相关阅读:
    Ubuntu 12.04 + nginx + php5 + phpfpm安装,并进行多站点配置
    PHP的FTP类
    php操作mongodb 分组排序
    mongodb 条件操作符
    PHP匿名登录FTP
    PHP连接到FTP服务器注意事项
    Java SE第二讲 原生数据类型Primitive Data Type
    java se 第五讲 运算符续
    Java SE 第一讲 入门jdk的下载安装
    Java SE第三讲:原生数据类型的使用陷阱
  • 原文地址:https://www.cnblogs.com/812-xiao-wen/p/10328397.html
Copyright © 2020-2023  润新知