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 逆序对数列的更多相关文章

  1. BZOJ 2431 逆序对数列 DP

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

  2. 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 ...

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

    2431: [HAOI2009]逆序对数列 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 954  Solved: 548[Submit][Status ...

  4. bzoj千题计划153:bzoj2431: [HAOI2009]逆序对数列

    http://www.lydsy.com/JudgeOnline/problem.php?id=2431 dp[i][j] 表示i的排列,有j个逆序对的方案数 加入i+1,此时i+1是排列中最大的数, ...

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

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

  6. bzoj2431: [HAOI2009]逆序对数列(前缀和优化dp)

    2431: [HAOI2009]逆序对数列 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 2312  Solved: 1330[Submit][Stat ...

  7. 【BZOJ2431】逆序对数列(动态规划)

    [BZOJ2431]逆序对数列(动态规划) 题面 Description 对于一个数列{ai},如果有i<j且ai>aj,那么我们称ai与aj为一对逆序对数.若对于任意一个由1~n自然数组 ...

  8. P2513 [HAOI2009]逆序对数列

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

  9. BZOJ2431 HAOI2009 逆序对数列 【DP】*

    BZOJ2431 HAOI2009 逆序对数列 Description 对于一个数列ai{a_i}ai​,如果有i<j且ai>aja_i>a_jai​>aj​,那么我们称aia ...

随机推荐

  1. ASP.NET Core MVC 打造一个简单的图书馆管理系统 (修正版)(四)图书信息的增删改查

    前言: 本系列文章主要为我之前所学知识的一次微小的实践,以我学校图书馆管理系统为雏形所作. 本系列文章主要参考资料: 微软文档:https://docs.microsoft.com/zh-cn/asp ...

  2. E20180225-hm-xa

    variation  n. 变化,变动; 变异,演变; 变奏曲; 变量; auxiliary adj. 辅助的 subscript  adj. 下标的,写在下方的,脚注的;  n. 下标,脚注,下角数 ...

  3. bzoj 1699: [Usaco2007 Jan]Balanced Lineup排队【st表||线段树】

    要求区间取min和max,可以用st表或线段树维护 st表 #include<iostream> #include<cstdio> using namespace std; c ...

  4. poj 3281 Dining【最大流】

    记得把牛拆掉!拆成两个点i和i'在中间连一条流量为1的边,来限制每头牛只能选一组 一般来讲是一种物品一个消费者各占一边,但是这里有两个物品,所以考虑把牛放在中间,s向所有的食物连流量为1的边,所有食物 ...

  5. bzoj4758: [Usaco2017 Jan]Subsequence Reversal(区间dp)

    4758: [Usaco2017 Jan]Subsequence Reversal Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 76  Solved ...

  6. P4324 [JSOI2016]扭动的回文串

    传送门 对\(A\).\(B\)串各跑一遍\(manacher\),求出第\(1\).\(2\)类扭动回文串的最大长度. 考虑第三类的扭动回文串\(S(i,j,k)\),一定可以表示为\(A(i,l) ...

  7. 第五篇(那些JAVA程序BUG中的常见单词)

    The left-hand side of an assignment must be a variable 赋值的左侧必须是变量 left-hand side 左边 assignment 赋值

  8. 第四章 朴素贝叶斯法(naive_Bayes)

    总结 朴素贝叶斯法实质上是概率估计. 由于加上了输入变量的各个参量条件独立性的强假设,使得条件分布中的参数大大减少.同时准确率也降低. 概率论上比较反直觉的一个问题:三门问题:由于主持人已经限定了他打 ...

  9. 【微信公众号开发】根据openId群发消息

    根据开发文档可知,只要使用POST方式提交固定格式的json字符串到那个地址即可.这里我写的是最简单的文本 第一步:建立对应的实体类. package cn.sp.bean; import java. ...

  10. 【BZOJ3514】Codechef MARCH14 GERALD07加强版(LCT_主席树)

    题目: BZOJ3514 分析: 看到这题真的是一脸懵逼无从下手,只好膜题解.看到「森林的联通块数 = 点数 - 边数」这一句话就立刻什么都会了 QAQ . 这题最重要的就是意识到上面那个式子(正确性 ...