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. 掌握 需求过程阅读笔记06
  2. CentOS系统dig和nslookup的安装
  3. React,Redux,React-redux的错综复杂关系
  4. 原文:我的数据库学习“曲线”
  5. android意图传递参数返回结果(六)
  6. 谈自由,ASP.NET Core才是未来?
  7. 前端学习(498):水平居中布局得第一种方式
  8. sublime text3安装插件 emmet
  9. 一个apply的实例
  10. 信息学奥赛C++语言:for_求和
  11. Springboot01创建第一个程序
  12. 会议报到和撒离时间算会期_【NKMUN2021】城市会议新模式:让心动成为可能
  13. 浙江大学PTA 数据结构 习题2.2 数组循环左移 (20 分)
  14. 用DirectX Audio和DirectShow播放声音和音乐(3)
  15. 你真的理解机器学习中偏差 - 方差之间的权衡吗?
  16. 不用软件直接查询QQ好友的IP地址(二) 通过 Ping 得知对方是否联网在线(与QQ是否上线无关)
  17. 循环冗余校验码(CRC码)
  18. 【配电网重构】基于粒子群算法实现最小化功率损耗的配电网重构附matlab代码
  19. 关于服务端的FIN_WAIT2
  20. 报错:npm ERR code EPERM

热门文章

  1. 数数塔 NBUT - 1083
  2. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1058:求一元二次方程
  3. 百练2757:最长上升子序列
  4. 【机器视觉】 HDevelop语言基础(六)-错误处理
  5. 【Qt】2D绘图之窗口-视口转换
  6. 【ARM】异常产生指令
  7. Css标题中图片居中,图片居中:任意图片在div里的上下垂直都居中!
  8. h2 不能访问localhost_个人学习系列 - Spring Boot 整合 H2
  9. crontab/ntpdate——时间同步
  10. Linux系统下如何查看及修改文件读写权限