http://www.lydsy.com/JudgeOnline/problem.php?id=2431

dp[i][j] 表示i的排列,有j个逆序对的方案数

加入i+1,此时i+1是排列中最大的数,

所以放在i+1后面的所有数都会与i+1形成逆序对

转移方程:dp[i][j]=Σ dp[i-1][j-k]  k∈[0,min(j,i-1)]

前缀和优化

朴素的DP

#include<cstdio>
#include<algorithm>using namespace std;const int mod=10000;int dp[1001][1001];int main()
{int n,k;scanf("%d%d",&n,&k);dp[1][0]=1;int m;for(int i=2;i<=n;++i){dp[i][0]=1;m=min(i*(i-1)/2,k);for(int j=1;j<=m;++j)for(int k=0;k<=i-1 && k<=j;++k)dp[i][j]=(dp[i][j]+dp[i-1][j-k])%mod;}printf("%d",dp[n][k]);
}

前缀和优化:

#include<cstdio>
#include<algorithm>using namespace std;const int mod=10000;#define N 1001int dp[N][N],sum[N][N];int main()
{int n,k;scanf("%d%d",&n,&k);dp[1][0]=1;for(int i=0;i<=k;++i) sum[1][i]=1;int m;for(int i=2;i<=n;++i){dp[i][0]=1;sum[i][0]=1;m=min(i*(i-1)/2,k);for(int j=1;j<=m;++j) {if(j<min(j,i-1)+1) dp[i][j]=sum[i-1][j];else dp[i][j]=sum[i-1][j]-sum[i-1][j-min(j,i-1)-1];if(dp[i][j]<0) dp[i][j]+=mod;sum[i][j]=sum[i][j-1]+dp[i][j];if(sum[i][j]>0) sum[i][j]-=mod;}for(int j=i*(i-1)/2+1;j<=k;++j) sum[i][j]=sum[i][j-1];}printf("%d",dp[n][k]);
}

2431: [HAOI2009]逆序对数列

Time Limit: 5 Sec  Memory Limit: 128 MB
Submit: 2444  Solved: 1422
[Submit][Status][Discuss]

Description

对于一个数列{ai},如果有i<j且ai>aj,那么我们称ai与aj为一对逆序对数。若对于任意一个由1~n自然数组成的
数列,可以很容易求出有多少个逆序对数。那么逆序对数为k的这样自然数数列到底有多少个?

Input

第一行为两个整数n,k。

Output

写入一个整数,表示符合条件的数列个数,由于这个数可能很大,你只需输出该数对10000求余数后的结果。

Sample Input

4 1

Sample Output

3

样例说明:
下列3个数列逆序对数都为1;分别是1 2 4 3 ;1 3 2 4 ;2 1 3 4;
100%的数据 n<=1000,k<=1000

转载于:https://www.cnblogs.com/TheRoadToTheGold/p/8072263.html

bzoj千题计划153:bzoj2431: [HAOI2009]逆序对数列相关推荐

  1. BZOJ 2431: [HAOI2009]逆序对数列【DP】

    2431: [HAOI2009]逆序对数列 Time Limit: 5 Sec Memory Limit: 128 MB Description 对于一个数列aiai,如果有i<ji<j且 ...

  2. bzoj2431:[HAOI2009]逆序对数列

    单组数据比51nod的那道题还弱...而且连优化都不用了.. #include<cstdio> #include<cstring> #include<cctype> ...

  3. bzoj 2431: [HAOI2009]逆序对数列

    2431: [HAOI2009]逆序对数列 Time Limit: 5 Sec  Memory Limit: 128 MB Submit: 2190  Solved: 1262 [Submit][St ...

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

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

  5. 【洛谷 P2513】 [HAOI2009]逆序对数列(DP)

    题目链接 这种求方案数的题一般都是\(dp\)吧. 注意到范围里\(k\)和\(n\)的范围一样大,\(k\)是完全可以更大的,到\(n\)的平方级别,所以这暗示了我们要把\(k\)写到状态里. \( ...

  6. BZOJ 2150. 部落战争(最小路径覆盖问题)【BZOJ千题计划】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 刷题就图一乐 题目链接 https://hydro.ac/d/bzoj/p/2150 是 hydro ...

  7. BZOJ 2151 种树(可反悔贪心,链表)【BZOJ千题计划】就图一乐

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2151 是 hydro 的 BZOJ ...

  8. BZOJ 1799 [Ahoi2009] self 同类分布(数位DP)【BZOJ千题计划(quexin】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/1799(样例时限设置有问题,应该为 2 ...

  9. bzoj千题计划143:bzoj1935: [Shoi2007]Tree 园丁的烦恼

    http://www.lydsy.com/JudgeOnline/problem.php?id=1935 二维偏序问题 排序x,离散化树状数组维护y #include<cstdio> #i ...

最新文章

  1. hdu_2227_Find the nondecreasing subsequences_树状数组,离散化
  2. strom-1.1.0模拟单词统计功能,Spout编写,Bolt编写,TopologyDriver编写,本地模式运行,集群模式运行,集群模式下看输出结果
  3. linux 配置SAN存储-IPSAN
  4. Emacs之LaTeX环境配置及效果展示
  5. HDU 5794:A Simple Chess(Lucas + DP)
  6. windows7正版验证_Windows7 寿终正寝:那些一并消逝的软件你知多少?
  7. python编程100个小程序-【Python精华】100个Python练手小程序
  8. 俊杰隐藏文件程序源码分享 C#
  9. 2017.5.12PM
  10. 骁龙845_性能强大价格更吸引 超值骁龙845手机盘点
  11. 勤哲excel服务器端口协议,用勤哲Excel服务器实现管理完整.doc
  12. 安永计划在印度雇佣2000人,扩大区块链等数字解决方案服务
  13. tplink怎么进去_手机怎么进入tplink路由器设置界面?
  14. 《认知觉醒》 读书笔记
  15. Registration based Few-Shot Anomaly Detection
  16. linux内存中的文件权限,Linux系统管理(用户权限、磁盘存储、文件系统、内存、进程)...
  17. 从契约演进看区块链的变革性
  18. QNX Hypervisor —— 虚拟设备
  19. 7-8 打印九九口诀表(15 分)
  20. 以太网实习_计算机网络实习心得体会

热门文章

  1. 《信息学奥赛一本通》分治算法 找数 例题
  2. Exp2 后门原理与实践 20164309
  3. 【机器视觉】 else算子
  4. 【机器视觉】 import算子
  5. mysql 5.5.安装包_完美!阿里内部MySQL笔记爆火,肝完不再删库到跑路!(文档+视频贼全!)...
  6. select选择后生成html,Javascript - 从select中添加选择列表
  7. DevStack安装问题,git clone noVNC.git失败
  8. 2019牛客暑期多校训练营(第六场)C - Palindrome Mouse (回文树dfs)
  9. mindspore学习之使用obsutil工具向桶中上传数据
  10. 怎样调整vim分屏窗口的宽度和高度?