P2528 [SHOI2001]排序工作量之新任务

题目描述

假设我们将序列中第i件物品的参数定义为Ai,那么排序就是指将A1,…,An从小到大排序。若i<j且Ai>Aj,则<i,j>就为一个“逆序对”。SORT公司是一个专门为用户提供排序服务的公司,他们的收费标准就是被要求排序物品的“逆序对”的个数,简称“逆序数”。

Grant是这家公司的排序员,他想知道对于n个参数都不同的物品组成的序列集合中,逆序对数为t的物品有多少个,并试给出其中一个最小的物品序列。所谓最小,即若有两个物品序列(A1,A2,…,An),(B1,B2,…,Bn),存在1≤I≤n,使得(A1,A2,…,Ai-1)=(B1,B2,…,Bi-1)且Ai<Bi。

输入输出格式

输入格式:

即两个整数n和t ( 1≤n≤20,0≤t≤n*(n-1)/2 )。

输出格式:

第一行表示n个参数都不通的物品组成的序列集合中,逆序数为t的序列个数;

第二行是所求物品参数序列。假设n个物品分别为1到n。

输入输出样例

输入样例#1: 复制

4 3
输出样例#1: 复制

6
1 4 3 2

洛谷题解:

第一小问动归解决;

第二小问只交换相邻两数达到使逆序对只加一的目的。

时间复杂度O(tn)

 #include<cstdio>
#include<cstring>
int i,j,k,n,t,p;
long long f[][];
int ans[];
short rec[];
int swap(int &a, int &b)
{
int t=ans[a];
ans[a]=ans[b];
ans[b]=t;
}
int main()
{
memset(f,,sizeof(f));
scanf("%d%d",&n,&t);
if (n==)
{
printf("1\n1");
return ;
}
f[][]=; f[][]=;
for (i=; i<=n; i++)
for (j=; j<=i*(i-)/; j++)
for (k=; k<i; k++)
if (j>=k)
f[i][j]+=f[i-][j-k];
printf("%lld\n",f[n][t]);
for (i=; i<=n; i++)
ans[i]=i;
for (i=; i<=t; i++)
{
memset(rec,,sizeof(rec));
p=n;
rec[ans[p]]=p;
while (rec[ans[p-]+] == ) {p--; rec[ans[p]]=p;}
int a=p-,b=rec[ans[p-]+];
swap(a,b);
}
for (i=; i<=n; i++)
printf("%d ",ans[i]);
return ;
}

P2528 [SHOI2001]排序工作量之新任务的更多相关文章

  1. 排序工作量之新任务(SHOI2001)

    排序工作量之新任务(SHOI2001) 给出两个整数n和t,求n的全排列中逆序对数为t的个数,和逆序对数为t的字典序最小全排列. 首先第一个问题可以用dp解决,\(f[i][j]\)表示前i个数,j个 ...

  2. C++ map排序(按照value值排序)_glp_hit_新浪博客

    C++ map排序(按照value值排序)_glp_hit_新浪博客     C++ map排序(按照value值排序)    (2012-07-12 14:19:51)    转载▼    标签:  ...

  3. Java对数组和列表的排序1.8新特性

    Java对数组列表的排序 数组 Integer[] a = new Integer[] { 1, 2, 3, 4, 5, 6, 9, 8, 7, 4, 5, 5, 6, 6 }; Arrays.sor ...

  4. java消除整型数组中重复的元素,排序后输出新数组

    法一: import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(S ...

  5. 用 Python 排序数据的多种方法

    用 Python 排序数据的多种方法 目录 [Python HOWTOs系列]排序 Python 列表有内置就地排序的方法 list.sort(),此外还有一个内置的 sorted() 函数将一个可迭 ...

  6. python 列表排序

    转自http://www.iplaypython.com/jinjie/jj114.html reverse()方法 将列表中元素反转排序,比如下面这样>>> x = [1,5,2, ...

  7. [ Arch Linux ] Arch更新源高速源整理之测速并自动排序高速源 加快更新效率

    方法一: 工具:rankmirrors 0x01 备份原来的源,并创建一个测试源 cd /etc/pacman.d cp mirrorlist mirrorlist.bakcp mirrorlist ...

  8. (转)MapReduce二次排序

    一.概述 MapReduce框架对处理结果的输出会根据key值进行默认的排序,这个默认排序可以满足一部分需求,但是也是十分有限的.在我们实际的需求当中,往往有要对reduce输出结果进行二次排序的需求 ...

  9. Python 列表排序方法reverse、sort、sorted详解

    python语言中的列表排序方法有三个:reverse反转/倒序排序.sort正序排序.sorted可以获取排序后的列表.在更高级列表排序中,后两中方法还可以加入条件参数进行排序. reverse() ...

随机推荐

  1. leetcode-两个数组交集(包含重复元素)

    Python解法代码: class Solution: def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]: ...

  2. leetcood学习笔记-141-环形列表

    题目描述: 方法一: class Solution(object): def hasCycle(self, head): """ :type head: ListNode ...

  3. C++11中的技术剖析(std bind原理简单图解)

    此文为转载,好像原出处的原文已经无法打开了. 本文解释了bind 是如何工作的.为了清晰,我对图中的语法作了一些简化(例如,省略函数调用操作符的参数类型),并且简化了 bind 的实现. bind 可 ...

  4. JavaWeb学习篇之----Session&&Cookie

    今天继续来看看JavaWeb的相关知识,这篇文章主要来讲一下Session和Cookie的相关知识,首先我们来看一下Cookie的相关知识: 一.Cookie 简介: Cookie是客户端技术,服务器 ...

  5. Delphi 一些pas

    Delphi -- 创建 桌面.发送到....快速启动栏.开始菜单.程序菜单.右键菜 单 {====================================================== ...

  6. NOIp2018集训test-9-17(am)

    这是一套去年在长沙考过的题,但是我当时就没理清楚+没写题解(我以前很多博客都写得跟shi一样,完全没有意义,看到就想打当时的我),所以又考得稀烂. T1.star way to heaven 容易想到 ...

  7. 判断PC端浏览器类型

    if (browserInfo.type !== 'IE' || (browserInfo.type == 'IE' && Number(browserInfo.version) &g ...

  8. C++之引用与符号“&”

    一.&的意思: 1.取地址符,这时候它用于数据的前面,比如int a=&b; 2.C++里还使用&作为引用符,如果你确认程序是标准的C而非C++的话,那么可以排除是引用了.引用 ...

  9. CSS3:目录

    ylbtech-CSS3:目录 1.返回顶部 1. http://www.runoob.com/css3/css3-tutorial.html 2. 2.返回顶部   3.返回顶部   4.返回顶部 ...

  10. VIM 配色方案,先保存一下

    https://github.com/chriskempson/tomorrow-theme http://ethanschoonover.com/solarized http://ethanscho ...