题目描述

我们说(i,j)是a1,a2,…,aN的一个逆序对当且仅当i<j且ai>a j。例如2,4,1,3,5的逆序对有3个,分别为(1,3),(2,3),(2,4)。现在已知N和K,求1…N的所有特定排列,这些排列的逆序对的数量恰好为K。输出这些特定排列的数量。

例如N=5,K=3的时候,满足条件的排列有15个,它们是:

1,2,5,4,3 1,3,4,5,2 1,3,5,2,4 1,4,2,5,3 1,4,3,2,5 1,5,2,3,4 2,1,4,5,3 2,1,5,3,4 2,3,1,5,4 2,3,4,1,5

2,4,1,3,5 3,1,2,5,4 3,1,4,2,5 3,2,1,4,5 4,1,2,3,5

输入输出格式

输入格式:

输入第一行有两个整数N和K。(N≤100,K≤N*(N-1)/2)

输出格式:

将1…N的逆序对数量为K的特定排列的数量输出。为了避免高精度计算,请将结果mod 10000以后再输出!

输入输出样例

输入样例#1:

5 3
输出样例#1:

15
先搜索。。。
ngs(k的最大值) n:f(k為0,1,2,3...)

0  0:1
 0  1:1
 1  2: 1,1
 3  3:1,2, 2
 6  4:1,3, 5,  6
10  5:1,4, 9, 15, 20, 22
15  6:1,5,14, 29, 49, 71,  90,  101, 101
21  7:1,6,20, 49, 98,169, 259,  359, 455,  531,  573,  573
28  8:1,7,27, 76,174,343, 602,  961,1415, 1940, 2493, 3017, 3450, 3736, 3836
36  9:1,8,35,111,285, 628,1230,2191,3606, 5545, 8031,11021,14395,17957,21450, 24584, 27073, 28675, 29228

45 10:1,9,44,155,440,1068,2298,4489,8095,13640,21670,32683,47043,64889,86054,110010,135853,162337,187959,211089,230131,243694,250749,250749
(註:應該是對稱的,為了不超行,我刪掉了後面的。)
看了一下上面的,相信聰明的,你,一定發現了規律。(呵呵,不可能的!)
if(j<=ngs[i]/2){
f[i][j]=f[i-1][j]+f[i][j-1];
if(j>=i) f[i][j]-=f[i-1][j-i];
}
else f[i][j]=f[i][ngs[i]-j];
呵呵,是不是很神奇。
因為數值很大,需要mod,這裡有一些小技巧。
代碼實現:
 #include<cstdio>
#include<iostream>
using namespace std;
const int mod=;
int n,k,ngs[],f[][];
int main(){
scanf("%d%d",&n,&k);f[][]=f[][]=;//初始化。
for(int i=;i<=n;i++){
ngs[i]=ngs[i-]+i-;//你懂的。
for(int j=;j<=ngs[i];j++){
f[i-][j]%=mod;//mod的小技巧。
if(j<=ngs[i]/){//DP方程應用。
f[i][j]=f[i-][j]+f[i][j-];
if(j>=i) f[i][j]-=f[i-][j-i];
}
else f[i][j]=f[i][ngs[i]-j];
}
}
printf("%d\n",f[n][k]%mod);//mod的小技巧。
return ;
}

這絕不是一道搜索題~

洛谷 P1521 求逆序对的更多相关文章

  1. 洛谷P1521 求逆序对 题解

    题意: 求1到n的全排列中有m对逆序对的方案数. 思路: 1.f[i][j]表示1到i的全排列中有j对逆序对的方案数. 2.显然,1到i的全排列最多有(i-1)*i/2对逆序对,而对于f[i][j]来 ...

  2. bzoj2431 || 洛谷P1521 求逆序对

    考虑一下插⼊法 n<=100n<=100n<=100 f[i][j]f[i][j]f[i][j]表⽰111~iii的全排列有j个逆序对的⽅案数 f[i][j]=Σf[i−1][j−k ...

  3. 洛谷P1908 求逆序对 [归并排序]

    题目描述 猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游 戏,现在他们喜欢玩统计.最近,TOM老猫查阅到一个人类称之为“逆序对”的东西,这东西是这样 ...

  4. 洛谷P1393 动态逆序对(CDQ分治)

    传送门 题解 听别人说这是洛谷用户的双倍经验啊……然而根本没有感觉到……因为另外的那题我是用树状数组套主席树做的……而且莫名其妙感觉那种方法思路更清晰(虽然码量稍稍大了那么一点点)……感谢Candy大 ...

  5. 洛谷P2513 [HAOI2009]逆序对数列

    P2513 [HAOI2009]逆序对数列 题目描述 对于一个数列{ai},如果有i<j且ai>aj,那么我们称ai与aj为一对逆序对数.若对于任意一个由1~n自然数组成的数列,可以很容易 ...

  6. 洛谷P3157 动态逆序对 [CQOI2011] cdq分治

    正解:cdq分治 解题报告: 传送门! 长得有点像双倍经验还麻油仔细看先放上来QwQ! 这题首先想到的就直接做逆序对,然后记录每个点的贡献,删去就减掉就好 但是仔细一想会发现布星啊,如果有一对逆序对的 ...

  7. 【洛谷P2513】逆序对数列

    前缀和.滚动数组优化dp f[i][j]表示前i个数,逆序对数为j的方案数 我们知道,在第k个位置放第i个数,单步得到的逆序对数为i-k 则在前i个数,最多能产生的逆序对数为i个,最少0个,均可转移到 ...

  8. 洛谷P1774 最接近神的人_NOI导刊2010提高(02)(求逆序对)

    To 洛谷.1774 最接近神的人 题目描述 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某种活动的图案.而石门上方用古代文写着“神的 ...

  9. [NOIP2013提高&洛谷P1966]火柴排队 题解(树状数组求逆序对)

    [NOIP2013提高&洛谷P1966]火柴排队 Description 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相 ...

随机推荐

  1. Spark SQL中 RDD 转换到 DataFrame

    1.people.txtsoyo8, 35小周, 30小华, 19soyo,882./** * Created by soyo on 17-10-10. * 利用反射机制推断RDD模式 */impor ...

  2. 3.4 目录和spooling

    文件管理部分主要讲文件目录.文件目录它是用于检索文件的.文件目录它是一种文件系统实现按0存取的一种重要手段.一个文件目录它由若干个目录项组成的.每一个目录项它记录了一个文件的相关信息.这个文件信息指明 ...

  3. codevs3981动态最大子段和(线段树)

    3981 动态最大子段和  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond     题目描述 Description 题目还是简单一点好... 有n个数,a ...

  4. [Swift通天遁地]二、表格表单-(2)创建右侧带有索引的UITableView(表单视图)

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  5. 【Kafka】《Kafka权威指南》——从Kafka读取数据

    应用程序使用 KafkaConsumer向 Kafka 订阅主题,并从订阅的主题上接收消息 . 从 Kafka 读取数据不同于从其他悄息系统读取数据,它涉及一些独特的概念和想法.如果不先理解 这些概念 ...

  6. Vue中nextTick()解析

    最近,在开发的时候遇到一个问题,让我对vue中nextTick()的用法加深了了解- 下面是在组件中引用的一个拖拽的组件: <vue-draggable-resizable class=&quo ...

  7. dubbo+zookeeper下生产者和消费者配置(基于springboot开发)

    一.总共分为三个目录: dubbo-api      服务的接口用于对接客户端和服务端 dubbo-client     客户端配置文件为:consumer.xml dubbo-service  服务 ...

  8. day03_12/13/2016_bean属性的设置之setter方法注入

  9. [转]Linux finger命令

    转自:http://os.51cto.com/art/201003/186354.htm Linux finger命令是系统管理员的必备命令之一,他可以清楚的告诉管理员有多少用户在同时使用他所管理的L ...

  10. [入门指南]-技术学习-Ebean

    占坑 官网