hdu1394

来源:互联网 发布:淘宝的海外直购在哪 编辑:程序博客网 时间:2024/06/06 11:00

链接:点击打开链接

题意:给出n个数,范围为0

代码:

#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>using namespace std;int a[5005];int main(){    int n,i,j,sum,temp;    while(scanf("%d",&n)!=EOF){        sum=0;        for(i=0;i<n;i++)        scanf("%d",&a[i]);        for(i=0;i<n;i++){            for(j=i+1;j<n;j++)            if(a[i]>a[j])            sum++;        }        temp=sum;        for(i=0;i<n;i++){            temp=temp-a[i]+(n-1-a[i]);      //当第一个数移动到最后时,后面比这个数大的为            sum=min(sum,temp);              //n-1-a[i]个,所以移动后逆序数为减去a[i]加上        }                                   //n-1-a[i].因为这题为0~n-1,要不然应该是减去        printf("%d\n",sum);                 //那一位的逆序数,再加上n-1-那一位的逆序数    }    return 0;}


~n-1,依次将队首的数换到队尾,一个循环后,求变换过程中逆序数最小为多少

 

代码:

0 0