排序工作量之新任务(SHOI2001)
排序工作量之新任务(SHOI2001)
给出两个整数n和t,求n的全排列中逆序对数为t的个数,和逆序对数为t的字典序最小全排列。
首先第一个问题可以用dp解决,\(f[i][j]\)表示前i个数,j个逆序对的序列数,那么\(f[i][j]=f[i-1][j-k]\ (k<i)(k\le j)\)。
易证明一个全排列,交换值差1的两个数,逆序对个数+或-1。同时可以推出逆序对数为t时的字典序最小全排列,一定一个严格上升,公差为1的序列,后面接上两个严格下降,公差为1的序列,并且后面两个序列衔接处差2。因此从后往前处理,不停交换当前数与后面的一个数即可。具体怎么实现请看代码。
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn=25;
int n, t;
long long f[maxn][maxn*maxn];
int a[maxn];
int main(){
scanf("%d%d", &n, &t);
if (t==0){
puts("1");
for (int i=1; i<=n; ++i) printf("%d ", i);
return 0; }
f[1][0]=f[2][0]=f[2][1]=1;
for (int i=3; i<=n; ++i)
for (int j=0; j<=i*(i-1)/2; ++j)
for (int k=0; k<i&&k<=j; ++k)
f[i][j]+=f[i-1][j-k];
printf("%lld\n", f[n][t]);
for (int i=1; i<=n; ++i) a[i]=i;
for (int i=n-1; i>=1; --i){
for (int j=n; j>i; --j){
swap(a[i], a[j]);
if (!(--t)) break;
} if (!t) break;
}
for (int i=1; i<=n; ++i) printf("%d ", a[i]);
return 0;
}
排序工作量之新任务(SHOI2001)的更多相关文章
- P2528 [SHOI2001]排序工作量之新任务
P2528 [SHOI2001]排序工作量之新任务 题目描述 假设我们将序列中第i件物品的参数定义为Ai,那么排序就是指将A1,…,An从小到大排序.若i<j且Ai>Aj,则<i ...
- C++ map排序(按照value值排序)_glp_hit_新浪博客
C++ map排序(按照value值排序)_glp_hit_新浪博客 C++ map排序(按照value值排序) (2012-07-12 14:19:51) 转载▼ 标签: ...
- Java对数组和列表的排序1.8新特性
Java对数组列表的排序 数组 Integer[] a = new Integer[] { 1, 2, 3, 4, 5, 6, 9, 8, 7, 4, 5, 5, 6, 6 }; Arrays.sor ...
- java消除整型数组中重复的元素,排序后输出新数组
法一: import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(S ...
- 用 Python 排序数据的多种方法
用 Python 排序数据的多种方法 目录 [Python HOWTOs系列]排序 Python 列表有内置就地排序的方法 list.sort(),此外还有一个内置的 sorted() 函数将一个可迭 ...
- python 列表排序
转自http://www.iplaypython.com/jinjie/jj114.html reverse()方法 将列表中元素反转排序,比如下面这样>>> x = [1,5,2, ...
- [ Arch Linux ] Arch更新源高速源整理之测速并自动排序高速源 加快更新效率
方法一: 工具:rankmirrors 0x01 备份原来的源,并创建一个测试源 cd /etc/pacman.d cp mirrorlist mirrorlist.bakcp mirrorlist ...
- (转)MapReduce二次排序
一.概述 MapReduce框架对处理结果的输出会根据key值进行默认的排序,这个默认排序可以满足一部分需求,但是也是十分有限的.在我们实际的需求当中,往往有要对reduce输出结果进行二次排序的需求 ...
- Python 列表排序方法reverse、sort、sorted详解
python语言中的列表排序方法有三个:reverse反转/倒序排序.sort正序排序.sorted可以获取排序后的列表.在更高级列表排序中,后两中方法还可以加入条件参数进行排序. reverse() ...
随机推荐
- 命令行执行大sql文件
mysql -h localhost -u root -p 123456 < F:/hello world/niuzi.sql
- Python基础-list,tuple,dict,set常用方法及区别
1,列表list 列表定义方式 lis1=[1,2,3,4]#一维数组 lis2=[1,2,3,[4,5,6]]#二维数组 依次多有多维数据,套几层就是几维数组 列表的取值可以通过下标来,下标都是从0 ...
- PHP使用http_build_query()构造URL字符串的方法
http_build_query http_build_query -- 生成 url-encoded 之后的请求字符串描述string http_build_query ( array formda ...
- hdu-5635 LCP Array
LCP Array Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total ...
- stl_list.h
stl_list.h // Filename: stl_list.h // Comment By: 凝霜 // E-mail: mdl2009@vip.qq.com // Blog: http://b ...
- java中变量的分类
•按被声明的位置划分: –成员变量:方法外部.类的内部定义的变量 –局部变量:方法或语句块内部定义的变量 –注意:类外面(类对应的大括号外面)不能有变量的声明 •按所属的数据类型划分: ...
- 2017-2018-1 20179215《Linux内核原理与分析》第九周作业
实验:理解进程调度时机跟踪分析进程调度与进程切换的过程 一.实验要求 (1)理解Linux系统中进程调度的时机,可以在内核代码中搜索schedule()函数,看都是哪里调用了schedule(),判 ...
- SparkWriteToHFile
1. HFile的LoadIncrement卡住 原来是因为权限,我一直以为,load函数之后是要删除文件的,但是hdfs://slave1:8020/test/info文件夹所有的是只读权限,而且考 ...
- bzoj 4823 & 洛谷 P3756 老C的方块 —— 最小割
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4823 https://www.luogu.org/problemnew/show/P3756 ...
- poj 1517 u Calculate e(精度控制+水题)
一.Description A simple mathematical formula for e is e=Σ0<=i<=n1/i! where n is allowed to go t ...