【NOIP2015模拟11.5】JZOJ8月5日提高组T1 俄罗斯套娃

题目



题解

题意就是说

将1~\(n\)排列,问有多少种方案使得序列的逆序对个数小于\(k\)

很容易想到DP

设\(f[i][j]\)表示当前到了插入第\(i\)个数,有\(j\)个逆序对的排列方案数

转移显然

\(f[i][j]=\sum_{k=j-i+1}^jf[i-1][k]\)

显而易见,这个转移是\(O(n^2k)\)的,会只有\(60\%\)

那么思考优化

既然是求和,为什么不用前缀和呢

所以可以用一个数组来记录前缀和,时间优化至\(O(nk)\)

但是注意到空间



手算一下:\(3000*3000*8/1024≈70312\)

所以说,要开滚动

注意取模

  1. #include<cstdio>
  2. #include<iostream>
  3. using namespace std;
  4. long long n,k,i,j,u,one,two,x,s,mod,f[2][3005],sum[3005];
  5. int main()
  6. {
  7. freopen("matryoshka.in","r",stdin);
  8. freopen("matryoshka.out","w",stdout);
  9. mod=10000000007;
  10. scanf("%lld%lld",&n,&k);
  11. x=1;
  12. for (i=1;i<=n;i++)
  13. x=x*i%mod;
  14. s=n*(n-1)/2;
  15. if (k>=s)
  16. {
  17. printf("%lld\n",x);
  18. fclose(stdin);
  19. fclose(stdout);
  20. return 0;
  21. }
  22. for (j=0;j<=k;j++)
  23. sum[j]=1;
  24. one=0;
  25. two=1;
  26. f[0][0]=1;
  27. for (i=1;i<=n;i++)
  28. {
  29. swap(one,two);
  30. for (j=0;j<=k;j++)
  31. if (j>=i) f[one][j]=(sum[j]-sum[j-i]+mod)%mod;
  32. else f[one][j]=sum[j]%mod;
  33. for (j=0;j<=k;j++)
  34. sum[j]=f[two][j]=0;
  35. sum[0]=f[one][0];
  36. for (j=1;j<=k;j++)
  37. sum[j]=(sum[j-1]+f[one][j])%mod;
  38. }
  39. printf("%lld\n",sum[k]);
  40. fclose(stdin);
  41. fclose(stdout);
  42. return 0;
  43. }

【NOIP2015模拟11.5】JZOJ8月5日提高组T1 俄罗斯套娃的更多相关文章

  1. 【NOIP2015模拟11.4】JZOJ8月6日提高组T1 刷题计划

    [NOIP2015模拟11.4]JZOJ8月6日提高组T1 刷题计划 题目 题解 题意 有\(n\)道题,编号为1~\(n\) 给出\(m\)次操作 每次操作有3种类型 1 \(x\) 表示交了\(A ...

  2. 【NOIP2015模拟11.5】JZOJ8月5日提高组T2 Lucas的数列

    [NOIP2015模拟11.5]JZOJ8月5日提高组T2 Lucas的数列 题目 PS:\(n*n*T*T<=10^{18}\)而不是\(10^1*8\) 题解 题意: 给出\(n\)个元素的 ...

  3. 【NOIP2015模拟11.2晚】JZOJ8月4日提高组T2 我的天

    [NOIP2015模拟11.2晚]JZOJ8月4日提高组T2 我的天 题目 很久很以前,有一个古老的村庄--xiba村,村子里生活着n+1个村民,但由于历届村长恐怖而且黑暗的魔法统治下,村民们各自过着 ...

  4. 【NOIP2015模拟11.5】JZOJ8月5日提高组T3 旅行

    [NOIP2015模拟11.5]JZOJ8月5日提高组T3 旅行 题目 若不存在第\(k\)短路径时,输出"Stupid Mike" 题解 题意 给出一个有\(n\)个点的树 问这 ...

  5. JZOJ8月4日提高组反思

    JZOJ8月4日提高组反思 被一堆2018&2019&2020的巨佬暴打 又是愉快的爆0的一天呢 T1 看了看题 没想法 暴力走起 求个质因数呀,二分呀-- 然后就炸了 正解预处理加二 ...

  6. JZOJ8月10日提高组反思

    JZOJ8月10日提高组反思 T1 没想到怎么打 就去打暴力了 本来想拿个30不错了 结果\(AC\)了 话说回来,数据也挺小的 T2 不AC便爆0 就一个数据点 给不给打暴力的人活了 正解是状压DP ...

  7. JZOJ8月15日提高组反思——2020年暑假终结篇

    JZOJ8月15日提高组反思--2020年暑假终结篇 T1 仙人掌最短路 抱歉我只会最短路 仙人掌是啥? 听说是缩点+\(LCA\) 最短路30 T2 直接暴力计算 正解\(DP\) \(amazin ...

  8. JZOJ8月5日提高组反思

    JZOJ8月5日提高组反思 再次炸了 虽然不是爆0 但也没差多少-- T1 想的DP 然后就打了 一开始是只能拿60的 后来想到了用前缀和优化 然后打完交了 最后一分钟测了一下空间 爆了 就赶紧把数组 ...

  9. JZOJ8月10日提高组T2 Fix

    JZOJ8月10日提高组T2 Fix 题目 Description There are a few points on a plane, and some are fixed on the plane ...

随机推荐

  1. python 学习小记之冒泡排序

    lst =[11,22,44,2,1,5,7,8,3] for i in range(len(lst)):     i = 0     while i < len(lst)-1:         ...

  2. 【Luogu】P1402 酒店之王 题解

    原题链接 这道题,很明显是个配对问题.于是,我们可以想到用网络最大流来做. 先整理一下题目条件. 很明显,根据贪心思想,要使最多人满意,每个人应该最多睡一个房间(似乎也没有人能睡两个房间),吃一道菜. ...

  3. .netcore 简单使用ElasticSearch

    .netcore 简单使用ElasticSearch(7.6) 最近在捣鼓学习了下ElasticSearch,在此记录下使用.netcore操作elastic search 的实现(简单的封装,使用) ...

  4. pytorch加载语音类自定义数据集

    pytorch对一下常用的公开数据集有很方便的API接口,但是当我们需要使用自己的数据集训练神经网络时,就需要自定义数据集,在pytorch中,提供了一些类,方便我们定义自己的数据集合 torch.u ...

  5. MySQL日期函数与日期转换格式化函数大全

    Mysql作为一款开元的免费关系型数据库,用户基础非常庞大,本文列出了MYSQL常用日期函数与日期转换格式化函数 1.DAYOFWEEK(date) 1 2 SELECT DAYOFWEEK('201 ...

  6. 求0到n之间素数个数的序列

    要求: (1) 找出0-1000之间素数(2) 设f(n)表示0-n之间的素数个数,计算出当n=0,1,2,3,.....,997时f(n)的值,并写入文件 分析: 首先找素数使用一个效率较高的方法- ...

  7. ISO/OSI参考模型

    ISO/OSI参考模型: 1.应用层:提供应用程序间通信.应用层与应用程序界面沟通,以达到展示给用户的目的.常见的协议:HTTP.HTTPS.FTP.TELNET.SSH.SMTP等 2.表示层:处理 ...

  8. 开发工具之Git(一)

    目录 一.什么是Git 二.Git基本原理 三.Git用户交互 一.什么是Git 答:Git是一个分布式版本控制软件.另外提一句,它的开发者就是大名鼎鼎的Linux之父Linus. 版本控制,顾名思义 ...

  9. 2018.1.22 js

    1.JavaScrip运算符 [案例]a+=b 等价于 a=a+ba-=b 等价于 a=a-ba*=b 等价于 a=a*ba/=b 等价于 a=a/ba%=b 等价于 a%=b2.逻辑控制语句语法1: ...

  10. javaScript高级程序设计.pdf && 你不知道的JavaScript

    转: JavaScript高级程序设计 链接:https://pan.baidu.com/s/1iRQ8FjpJqutZJzgdJ8ZBKA 提取码:ndnp 你不知道的JavaScript 链接:h ...