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. u-boot 移植工作目录

    1. 添加工作用户 [root@localhost ~]#useradd -G root -g root -d/home/uboot uboot 2. 建立工作目录 [uboot@localhost ...

  2. 检测apache状态,当apache处于非running状态如何脚本启动

    编写脚本内容 #!/bin/bashURL="http://127.0.0.1/"curlit(){curl --connect-timeout 15 --max-time 20 ...

  3. python的一个简单日志记录库glog的使用

    一. glog的简介 glog所记录的日志信息总是记录到标准的stderr中,即控制台终端. 每一行日志记录总是会添加一个谷歌风格的前缀,即google-style log prefix, 它的形式如 ...

  4. Mac电脑如何转换图片格式?ImageWell for Mac转换图片格式教程

    想用Mac电脑转换图片格式?我想你可以借助ImageWell for Mac软件!ImageWell是一款简单好用的的图像处理工具,具有显示,编辑,处理,保存等功能.下面小编来为大家演示在Mac电脑上 ...

  5. 5432. 【NOIP2017提高A组集训10.28】三元组

    题目 题目大意 给你\(X+Y+Z\)个三元组\((x_i,y_i,z_i)\). 然后选\(X\)个\(x_i\),选\(Y\)个\(y_i\),选\(Z\)个\(z_i\). 每个三元组只能选择其 ...

  6. 8-26接口压力测试-1Dubbo接口测试

    1. Dubbo Dubbo是一个分布式服务框架,提供了高性能和透明化的RPC(Remote Procedure Call Protocol)远程服务调用方案和服务治理方案. SOA:面向服务的架构 ...

  7. php面向对象深入理解(二)

    一个简单的小程序:   配置 config.ini <?php //项目的根目录 define("ROOT","F:/文件夹的名字/oop/"); //数 ...

  8. Java语法清单-快速回顾(开发)

    Java CheatSheet 01.基础 hello,world! public static void main(String[] args) { System.out.println(" ...

  9. HDU6447 YJJ's Salesman-2018CCPC网络赛-线段树求区间最值+离散化+dp

    目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog Problem:Portal传送门  原题目描述在最下面.  1e5个点,问 ...

  10. Spring Boot 遇到空指针

    @Autowired private IRoadRescueService roadRescueService; 千万不要把注入的service类设为static