[BZOJ] 2431 逆序对数列
Time Limit: 5 Sec Memory Limit: 128 MB
Submit: 2611 Solved: 1526
[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
HINT
Source
Day1
先想到区间dp,发现只记录前缀就行,所以二维就可以解决。
f[i][j],前i个数,j个逆序对的方案数。
对于新加入的i+1,可以造成i+1种逆序对,所以枚举前面的就行了。
先写的暴力版本,TLE两个点,一算10000*1000没爆int,把mod放外面,快了不少,过了一个点,然后循环展开,不开o2也跑得飞快(相较朴素暴力…)
#include<iostream>
#include<cstdio>
using namespace std;
int n,k;
int f[1005][1005]={1};
int main(){
scanf("%d%d",&n,&k);
for(register int i=1;i<=n;i++){
for(register int j=0;j<=k;j++){
int l=0;
for(l=0;l<i-8;l+=8){
if(j<l) continue;
f[i][j]+=f[i-1][j-l];
if(j<l+1) continue;
f[i][j]+=f[i-1][j-l-1];
if(j<l+2) continue;
f[i][j]+=f[i-1][j-l-2];
if(j<l+3) continue;
f[i][j]+=f[i-1][j-l-3];
if(j<l+4) continue;
f[i][j]+=f[i-1][j-l-4];
if(j<l+5) continue;
f[i][j]+=f[i-1][j-l-5];
if(j<l+6) continue;
f[i][j]+=f[i-1][j-l-6];
if(j<l+7) continue;
f[i][j]+=f[i-1][j-l-7];
}
for(l;l<i;l++){
if(j<l) continue;
f[i][j]+=f[i-1][j-l];
}
f[i][j]%=10000;
}
}
printf("%d",f[n][k]);
return 0;
}
正解是前缀和优化,每次更新都是加一段连续区间的值,可以用前缀和降复杂度。
#include<iostream>
#include<cstdio>
using namespace std;
const int MAXN=1005;
const int MOD=10000;
int dp[MAXN][MAXN];
int n,k,ans,sum;
int main()
{
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++) dp[i][0]=1;
for(int i=2;i<=n;i++)
{
sum=0;
for(int j=0;j<=k;j++)
{
(sum+=dp[i-1][j])%MOD;
dp[i][j]=sum%MOD;
if(j-i+1>=0)((sum-=dp[i-1][j-i+1])+=MOD)%MOD;
}
}
printf("%d\n",dp[n][k]);
return 0;
}
[BZOJ] 2431 逆序对数列的更多相关文章
- BZOJ 2431 逆序对数列 DP
2431: [HAOI2009]逆序对数列 Time Limit: 5 Sec Memory Limit: 128 MB Description 对于一个数列{ai},如果有i< j且ai> ...
- BZOJ 2431: [HAOI2009]逆序对数列( dp )
dp(i,j)表示1~i的全部排列中逆序对数为j的个数. 从1~i-1的全部排列中加入i, 那么可以产生的逆序对数为0~i-1, 所以 dp(i,j) = Σ dp(i-1,k) (j-i+1 ≤ k ...
- 2431: [HAOI2009]逆序对数列
2431: [HAOI2009]逆序对数列 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 954 Solved: 548[Submit][Status ...
- bzoj千题计划153:bzoj2431: [HAOI2009]逆序对数列
http://www.lydsy.com/JudgeOnline/problem.php?id=2431 dp[i][j] 表示i的排列,有j个逆序对的方案数 加入i+1,此时i+1是排列中最大的数, ...
- bzoj2431:[HAOI2009]逆序对数列
单组数据比51nod的那道题还弱...而且连优化都不用了.. #include<cstdio> #include<cstring> #include<cctype> ...
- bzoj2431: [HAOI2009]逆序对数列(前缀和优化dp)
2431: [HAOI2009]逆序对数列 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 2312 Solved: 1330[Submit][Stat ...
- 【BZOJ2431】逆序对数列(动态规划)
[BZOJ2431]逆序对数列(动态规划) 题面 Description 对于一个数列{ai},如果有i<j且ai>aj,那么我们称ai与aj为一对逆序对数.若对于任意一个由1~n自然数组 ...
- P2513 [HAOI2009]逆序对数列
P2513 [HAOI2009]逆序对数列 题目描述 对于一个数列{ai},如果有iaj,那么我们称ai与aj为一对逆序对数.若对于任意一个由1~n自然数组成的数列,可以很容易求出有多少个逆序对数.那 ...
- BZOJ2431 HAOI2009 逆序对数列 【DP】*
BZOJ2431 HAOI2009 逆序对数列 Description 对于一个数列ai{a_i}ai,如果有i<j且ai>aja_i>a_jai>aj,那么我们称aia ...
随机推荐
- Codeforces 938D Buy a Ticket 【spfa优化】
用到了网络流的思想(大概).新建一个源点s,所有边权扩大两倍,然后所有的点向s连边权为点权的无向边,然后以s为起点跑spfa(S什么L优化的),这样每个点到s的距离就是答案. 原因的话,考虑答案应该是 ...
- 用set和shopt设置bash选项
1.set命令 -o打开选项,+o关闭选项#set -o //显示选项设置#set -o noclobber //打开该选项,重定向将覆盖已存在的文件#set +o noclobber //关闭该选项 ...
- SPOJ GSS3 线段树系列1
SPOJ GSS系列真是有毒啊! 立志刷完,把线段树搞完! 来自lydrainbowcat线段树上的一道例题.(所以解法参考了lyd老师) 题意翻译 n 个数, q 次操作 操作0 x y把 Ax 修 ...
- Hihocoder [Offer收割]编程练习赛70 解题报告 By cellur925
并没有第四题.(还不会矩阵乘法加速线性数列) 题目1 : 数位翻转 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个数 n,你可以进行若干次操作,每次操作可以翻转 ...
- 使用Maven将dubbox安装进资源仓库
dubbox网址:https://github.com/dangdangdotcom/dubbox dobbox版本:https://github.com/dangdangdotcom/dubbox/ ...
- 16-6 WEB存储-通讯录实战
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- 转 ORA-00054 的解决方法
统有一个不用的索引,想删除这个索引, SQL> drop index GPSTIME_GLOBAL_INDEX 2 /drop index GPSTIME_GLOBAL_INDEX ...
- Oracle的一些名词和概念
1.数据库 这里的数据库不是通常情况下我们所说的数据库,而是一个Oracle的专业名词.它是磁盘上存储数据的集合,在物理上表现为数据文件. 日志文件和控制文件等,在逻辑上以表空间形式存在.使用时,必须 ...
- JS filters-table简单过滤-Version 1
初级版本: 输入框可检索,空格检索忽略 radio点击后会过滤 最后的两个输入框可根据age范围检索过滤 三个单独的功能,不能协同工作 <!DOCTYPE html> <html&g ...
- 堆排序原理及其js实现
图文来源:https://www.cnblogs.com/chengxiao/p/6129630.html 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时 ...