题目描述

魔王撒旦为了建立魔物的乐土,率领亚多拉玛雷克、艾谢尔、路西菲尔、以 及马纳果达这四位恶魔大元帅进攻人类世界。然而此时手持圣剑的勇者艾米莉亚出现了。
  战败的魔王逃跑时穿越到了地球,以真奥贞夫的身份过着打工族的生活。最近真奥贞夫手头有点紧,他接到一个待遇不错的任务,但是却没有时间。无奈之下,他只能找到可靠的 YxuanwKeith 来帮忙。 然而王导最近忙于筹拍宣传片,抽不出时间,于是 YxuanwKeith 又找到了你来替他完成这个工作。YxuanwKeith 帮忙的工作是为一个大赛设计分队方式。

这个比赛有 N 个人参加,我们可以给这 N 个人分任意数量(不超过N)的队伍,相同队伍的人用相同数字来表示。如果有多种表示,我们认为字典序最小的表示才是有效的。
  由于组队的情况实在是太多了,今年大赛组委会决定在比赛的第 i 天采用所有序列中字典序第i小的分队方式。
  现在组委会会向你询问一个序列,希望你能告诉他们这个序列的分队方式会在哪一天被采用。由于答案可能会很大,所以组委会只关心对1000007取模后的结果。

输入格式

第一行,一个整数 N 表示参赛人数。
  第二行,N 个整数,表示询问的分队方式的序列。

输出格式

一行,一个整数表示这种方式会在第几天被采用。答案对 1,000,007 取模。
输入样例
  3
  1 2 2
输出样例
  4
提示
  比赛各天的分队情况如下:第一天:1,1,1第二天:1,1,2第三天:1,2,1第四天:1,2,2第五天:1,2,3
  对于100%的数据,N ≤10000,数据保证询问的数列是一个有效的序列。

分析

先来看一下什么是合法的序列。

因为字典序最小,所以序列的前缀最大值每次最多上升1(不然就可以将它替换成更小的编号)

然后我们来看如何计算字典序

考虑一下与原序列s有相同前缀,但在i位开始与s不同的序列的个数

设s在i位置的数为a[i],前缀的最大值为mx

对于在位置i的数大于a[i]的序列,又因为前缀相同,所以它们字典序肯定比s大

对于在位置i的数等于a[i]的数列。。。。。。不是说了在i位开始不同的吗。。直接递归到i+1位计算贡献就好了。

对于在位置i的数小于a[i]的序列,又因为前缀相同,所以它们字典序肯定比s小,这些都可以产生贡献

而这些序列的性质是前缀最大值为mx,长度为n-i+1,第i位小于a[i]。

直接设dp式子dp[i][j]表示前缀最大值为j,剩下i位的不同方案个数

那么这些序列的贡献就是$(a[i]-1)*dp[n-i][mx]$

考虑怎么求dp式子

那么每次就有更新最大值与不更新最大值两种方案

$$dp[i][j]=j \times dp[i-1][j]+dp[i-1][j-1]$$

处理出$n^2$这个数组然后对原序列一位一位的去计算贡献$(a[i]-1)*dp[n-i][mx]$就好了

当然也可以直接dp需要的值,即在dp的时候就把(a[i]-1)放进去(这个无法用语言表达,具体看代码吧

Code

#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=;
const int mod=1e6+;
int n,mx,nw,f[][maxn];
int main()
{
scanf("%d",&n);
for(int i=,a;i<=n;nw=!nw,i++)
{
scanf("%d",&a);
for(int j=i;j>=;j--)
f[nw][j]=(f[!nw][j-]+1ll*f[!nw][j]*j+(j==mx)*(a-))%mod;
mx=max(mx,a);
}
int ans=;
for(int i=;i<=n;i++)ans=(ans+f[!nw][i])%mod;
printf("%d\n",ans);
}

【CSP膜你赛】大逃亡的更多相关文章

  1. 【CSP膜你赛】ATM

    题目描述 小沈阳在小品里说过:“人生最痛苦的事情是人死了,钱还没花掉”. 于是小宋(80 岁)决定要将所有的储蓄从 ATM 机中取出花光. 小宋忘记 了她有多少存款(银行卡密码她是记得的 2333), ...

  2. 【CSP膜你赛】柠檬的密码(manacher 二分 单调性 st表)

    题目描述 Lemon觉得他需要一个复杂的密码来保证他的帐号的安全.他经过多日思考,决定使用一个长度为奇数的回文串来作为他的密码.  但是这个回文串太长了,Lemon记不住,于是Lemon决定把它记在本 ...

  3. cdcqの省选膜你赛

    cdcqの省选膜你赛 比赛当天因为在杠hnoi2016的大数据结构没有参加,今天补了一下.挺好玩的虽然不看一句话题意的话真的卡读题 此生无悔入东方,来世愿生幻想乡 2651. 新史「新幻想史 -现代史 ...

  4. hdu.1429.胜利大逃亡(续)(bfs + 0101011110)

    胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  5. 胜利大逃亡[HDU1253]

    胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  6. hdu 1429 胜利大逃亡(续)

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Description Ignatius再次被魔王抓走了(搞不懂他咋这么讨魔王 ...

  7. Hdu 1429 胜利大逃亡(续) 分类: Brush Mode 2014-08-07 17:01 92人阅读 评论(0) 收藏

    胜利大逃亡(续) Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Subm ...

  8. HDOJ 1429 胜利大逃亡(续)

    胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  9. hdu 1429 胜利大逃亡(续)(bfs+位压缩)

    胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

随机推荐

  1. 【转载】socket通信-C#实现tcp收发字符串文本数据

    在日常碰到的项目中,有些场景需要发送文本数据,也就是字符串,比如简单的聊天文字,JSON字符串等场景.那么如何如何使用SharpSocket来收发此类数据呢?其中要掌握的关键点是什么呢? 点击查看原博 ...

  2. [K8s 1.9实践]Kubeadm 1.9 HA 高可用 集群 本地离线镜像部署

    k8s介绍 k8s 发展速度很快,目前很多大的公司容器集群都基于该项目,如京东,腾讯,滴滴,瓜子二手车,北森等等. kubernetes1.9版本发布2017年12月15日,每是那三个月一个迭代, W ...

  3. 基于TCP协议的大文件传输(粘包问题处理)

    基于TCP的大文件上传服务端实现 # 服务端 # -*- coding: utf-8 -*- from socket import * import json, struct server = soc ...

  4. Win10 Microsoft Store 微软商店 Error 0x00000193 解决方法

    0x00 前言 最近使用 CFW 过程中使用 Fiddle Web Debug 设置 Store 的回环代理的过程中发现无论是否使用代理,Store 都无法访问网络的问题,在最下面的提示中出现了 0x ...

  5. Linux(Redhat)传送门汇总

    Linux(Redhat)传送门汇总 linux 环境布置 常用命令与shell 常用命令 shell 环境布置 Linux虚拟机安装(rhel 7.4) 虚拟机网络设置 VMware虚拟机开机启动 ...

  6. Kubernetes架构及相关服务详解

    11.1.了解架构 K8s分为两部分: 1.Master节点 2.node节点 Master节点组件: 1.etcd分布式持久化存储 2.api服务器 3.scheduler 4.controller ...

  7. 【转】tf.train.MonitoredTrainingSession()解析

    原文地址:https://blog.csdn.net/mrr1ght/article/details/81006343. 本文有删减. MonitoredTrainingSession定义 首先,tf ...

  8. python 验证码识别示例(三) 简单验证码识别

    今天介绍一个简单验证的识别. 主要是标准的格式,没有扭曲和变现.就用 pytesseract 去识别一下. 验证码地址:https://user.www.gov.cn/sso/verifyimg_ed ...

  9. BigDecimal加减乘除计算

    一.简述 java.math.BigDecimal不可变的.任意精度的有符号十进制数.BigDecimal 由任意精度的整数非标度值(unscaledValue)和32位的整数标度(scale)组成. ...

  10. awk编程的基本用法

    awk也是用来处理文本的,awk语言可以从文件或字符串中基于指定规则浏览和抽取信息,可以实现数据查找.抽取文件中的数据.创建管道流命令等功能. awk模式匹配 第一种方法打印空白行将空白行打印出来,并 ...