2019.03.27【GDOI2019】模拟 T3

题目大意

给出$n$, $p$, 求有多少长度为$n$的排列可以被分成三个上升子序列, 数量对$p$取模,

数据范围 $3 \leq n \leq 500$.

思路

首先让我们考虑如果有一个排列,如何判断这个排列合法,我可以考虑贪心,维护三个上升序列的末尾(最大值),从左到右依次将数插入序列,把这个数贪心的加到它可以加入的末尾的数最大的序列里.

因此考虑dp,定义$f[i][j][k]$表示现在有$i$个数,形成了三个上升子序列,其中最大的子序列末尾显然是第$i$大的数,第二大的子序列末尾是第$j$大的数,第三大的子序列末尾是第$k$大的数,这样的序列的数量,显然,这样枚举是不会重复的,转移的时候,考虑在这个序列末尾加数,考虑加的这个数在这$i$个数中的相对位置,设这个位置为$l$,有
$$
f[i][j][k] \rightarrow f[i+1][j][k],l=i+1 \\
f[i][j][k] \rightarrow f[i+1][l][k],j < l \leq i \\
f[i][j][k] \rightarrow f[i+1][j+1][l], k < l \leq j
$$
一个简单的$O(n^4)$dp

#define add(x, y) x = (x + y >= md) ? x + y - md : x + y
f[1][0][0] = 1;
for (int i = 1; i < n; ++i)for (int j = 0; j < i; ++j)for (int k = 0; k <= j; ++k)if (f[i][j][k] > 0) {int x = f[i][j][k];for (int l = k + 1; l <= j; ++l)add(f[i + 1][j + 1][l], x);for (int l = j + 1; l <= i; ++l)add(f[i + 1][l][k], x);add(f[i + 1][j][k], x);}

考虑优化,发现转移的都是一段,随便前缀和搞一搞就可以了

#define add(x, y) x = (x + y >= md) ? x + y - md : x + y
#define sub(x, y) x = (x - y < 0) ? x - y + md : x - y
f[1][0][0] = 1;
for (int i = 1; i < n; ++i) {int cur = i & 1, nxt = cur ^ 1;memset(f[nxt], 0, sizeof(f[nxt]));memset(tag1, 0, sizeof(tag1));memset(tag2, 0, sizeof(tag2));for (int j = 0; j < i; ++j)for (int k = 0; k <= j; ++k) if (f[cur][j][k] > 0) {int x = f[cur][j][k];add(tag1[j + 1][k + 1], x);sub(tag1[j + 1][j + 1], x);add(tag2[j + 1][k], x);sub(tag2[i + 1][k], x);add(f[nxt][j][k], x);}for (int j = 0; j <= i; ++j)for (int k = 1; k <= i; ++k)add(tag1[j][k], tag1[j][k - 1]), add(tag2[k][j], tag2[k - 1][j]);for (int j = 0; j <= i; ++j)for (int k = 0; k <= j; ++k) {add(f[nxt][j][k], tag1[j][k]);add(f[nxt][j][k], tag2[j][k]);} 
}

复杂度$O(n^3)$.

转载于:https://www.cnblogs.com/withoutpower/p/10616499.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/449403.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DOM的那些事

到底调用函数时要不要加&#xff08;&#xff09;&#xff1f; 在html中&#xff0c;onclick后必须接字符串调用&#xff0c;而在js中则必须接函数进行调用。 addEventListener和click区别 onclick只是一个属性&#xff0c;且是唯一的。其只能绑定一个事件&#xff0c;容易在不…

真格量化-隐含波动率购买

# coding:utf-8 #!/usr/bin/env python from PoboAPI import * import datetime import numpy as np #50ETF 和 50ETF期权的对冲交易,当ETF隐含波动率较高时就买50ETF并做空50ETF看涨期权#开始时间,用于初始化一些参数 def OnStart(context) :print("system starting...…

能让你成为更优秀程序员的10个C语言资源

本文由 伯乐在线 - archychu 翻译自 mycplus。欢迎加入 技术翻译小组。转载请参见文章末尾处的要求。一些人觉得编程无聊&#xff0c;一些人觉得它很好玩。但每个程序员都必须紧跟编程语言的潮流。大多数程序员都是从C开始学习编程的&#xff0c;因为C是用来写操作系统、应用程…

解决 -- 代码没有问题时接口报错:Status Code: 404 Not Found

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 我能确定这个工程的接口代码肯定没有问题&#xff0c;这时请求接口依旧报 404。 如&#xff1a; 经过多方检查 最终确认问题原因&…

渗透测试学习

渗透学习路线&#xff1a;https://www.sec-wiki.com/skill/2 经常应该浏览的网站&#xff1a;www.freebuf.comdrops.wooyun.orgwww.sec-wiki.com/www.t00ls.net/www.91ri.orghttp://fex.baidu.com/blog/2014/05/what-happen/了解了web访问网页的基本过程http://www.qianxingzhe…

java版开源工作流引擎ccflow从表数据数据源导入设置

为什么80%的码农都做不了架构师&#xff1f;>>> 关键字驰骋工作流引擎 流程快速开发平台 workflow ccflow jflow .net开源工作流 从表数据导入设置 概要说明在从表的使用中我一般都会用到从数据库引入一些数据到表单中&#xff0c;这时候就需要有一个功能能够查询…

真格量化——中性策略交易期权

#!/usr/bin/env python # coding:utf-8 from PoboAPI import * import datetime import time import numpy as np from copy import *import pandas as pd #设定持仓细节数据表 #g.df = {}g.df = pd.DataFrame(columns = [date,code,price,volume,stoploss,iv]) g.a = [] g.b =…

一周消息树:程序员想找好工作?那就学好Linux!

摘要&#xff1a;从一小众化的系统发展到今天在国际上支撑着绝大部分公司的重量级系统&#xff0c;Liunx现在被越来越多的公司重视。而Linux人才却没有跟上&#xff0c;为此&#xff0c;MongoDB公司的副总裁Matt Asay给软件开发者们一个建议&#xff1a;要学好Linux。 近期&…

注解@Cacheable(value =“XXX“) 实现缓存 -- 失效原因

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一个项目中使用到了注解缓存&#xff0c;但无论怎么检查都不生效&#xff0c;反复确认缓存的使用本身应该没有出错。 最后确认原因&…

读书笔记011:《伤寒论》- 手厥阴心包经

手厥阴心主起胸&#xff0c;属包下膈三焦宫&#xff0c;支者循胸出胁下&#xff0c;胁下连腋三寸同。仍上抵腋循臑内&#xff0c;太阴、少阴两经中&#xff0c;指透中冲支者别&#xff0c;小指次指络相通。此经少气原多血&#xff0c;是动则病手心热&#xff0c;肘臂挛急腋下肿…

真格量化——做空波动率卖期权策略

# coding:utf-8 #!/usr/bin/env python # EmuCounter2 from PoboAPI import * import datetime import numpy as np#开始时间,用于初始化一些参数 def OnStart(context) :print "system starting..."#设定全局变量品种g.code1 = "m1901-C-3300.DCE" #豆粕…

支撑4.5亿活跃用户的WhatsApp架构概览

摘要&#xff1a;不顾谷歌CEO阻拦&#xff0c;WhatsApp最终以190亿美元的价格花落Facebook。能获如此天价与其月4.5亿的活跃用户是分不开的&#xff0c;同样不可或缺的还有支撑每日数百亿消息的高可靠架构。 【编者按】以190亿美元的价格出售给Facebook&#xff0c;交易谈判过…

C++ 常用函数总结

平时常用C刷一些算法题&#xff0c;C内置了许多好用的工具函数&#xff0c;但时间一长总是容易忘记&#xff0c;这里简单做一下总结&#xff0c;方便复习&#xff01; <stdlib.h> atoi(const char* str)将一串字符转换为int型atof(const char* str)同上&#xff0c;转换为…

注解驱动的 Spring cache 缓存介绍

概述 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Spring 3.1 引入了激动人心的基于注释&#xff08;annotation&#xff09;的缓存&#xff08;cache&#xff09;技术&#xff0c;…

真格量化——50etf与期权对冲策略

# coding:utf-8 #!/usr/bin/env python from PoboAPI import * import datetime import numpy as np #50ETF 和 50ETF期权的对冲交易,当ETF隐含波动率较高时就买50ETF并做空50ETF看涨期权#开始时间,用于初始化一些参数 def OnStart(context) :print("system starting...…

如何用Linux命令行管理网络:11个你必须知道的命令

本文由 极客范 - jerrylee 翻译自 Chris Hoffman。欢迎加入极客翻译小组&#xff0c;同我们一道翻译与分享。转载请参见文章末尾处的要求。无论你是要下载文件、诊断网络问题、管理网络接口&#xff0c;还是查看网络的统计数据&#xff0c;都有终端命令可以来完成。这篇文章收…

运营商市场经营方向及趋势

中电信、中联通、中移动三大运营商可以说在行业内都是大名鼎鼎的&#xff0c;不管是产品、服务及发展等趋势都在友好、积极的环境下持续发酵、有效发展中。 处于上海地区的三大运营商指定一级代理商威禹通信在近期&#xff0c;也频频感受到三大运营商的动作&#xff0c;有效&am…

真格量化——50期权历史波动率策略

#!/usr/bin/env python # coding:utf-8 from PoboAPI import * import datetime import time import numpy as np #日线级别 #开始时间,用于初始化一些参数 def OnStart(context) :print("I\m starting...")#设定一个全局变量品种,本策略交易50ETF期权g.code = &quo…

10 张图带你深入理解Docker容器和镜像

此文中部分信息、图片需要 fan qiang , 如果未能正常显示&#xff0c;文末有原文连接 。【Kubernetes培训通知】DockOne将会于2018年5月18日在上海举办Kubernetes技术培训&#xff0c;培训内容包括&#xff1a;容器介绍、容器网络、Kubernetes架构基础介绍、安装、设计理念、架…

k8s强制删除pod

有时候pod一直在Terminating kubectl delete pod xxx --force --grace-period0 转载于:https://www.cnblogs.com/floud/p/10620783.html