【BZOJ4621】Tc605

Description

最初你有一个长度为 N 的数字序列 A。为了方便起见,序列 A 是一个排列。
你可以操作最多 K 次。每一次操作你可以先选定一个 A 的一个子串,然后将这个子串的数字全部变成原来这个子串的最大值。问最终有几种可能的数字序列。答案对 1e9+7 取模。

Input

第一行两个数 N 和 K。第二行 N 个数,描述一个排列 A。 
N,K<=500,
有6组数据N>100,有梯度

Output

输出一个数,表示答案在模域下的值。 

Sample Input

3 2
3 1 2

Sample Output

4

题解:好题。

先预处理出每个数左边和右边第一个比它大的数的位置ls,rs,然后将这个数看成一个区间,问题就变成了选出一些区间覆盖整个序列的方案数。用f[i][j]表示覆盖到位置i,已选择了j个区间的方案数。那么对于所有ls<=i<=rs,用$\sum\limits_{k=ls-1}^{i-1}f[k][j-1]$更新即可,显然可以用前缀和优化。

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int P=1000000007;
int n,m,ans,sum;
int f[510][510],v[510];
int main()
{
scanf("%d%d",&n,&m);
int i,j,k,ls,rs;
for(i=1;i<=n;i++) scanf("%d",&v[i]);
f[0][0]=1;
for(i=1;i<=n;i++)
{
for(ls=i;ls>1&&v[ls-1]<v[i];ls--);
for(rs=i;rs<n&&v[rs+1]<v[i];rs++);
for(j=m;j>=0;j--)
{
f[i][j]=(f[i][j]+f[i-1][j])%P;
if(j)
{
sum=0;
for(k=ls;k<=rs;k++) sum=(sum+f[k-1][j-1])%P,f[k][j]=(f[k][j]+sum)%P;
f[i][j]=(f[i][j]-f[i-1][j-1]+P)%P;
}
}
}
for(i=0;i<=m;i++) ans=(ans+f[n][i])%P;
printf("%d",ans);
return 0;
}//3 2 1 2 3

【BZOJ4621】Tc605 DP的更多相关文章

  1. LG4719 【模板】动态dp 及 LG4751 动态dp【加强版】

    题意 题目描述 给定一棵\(n\)个点的树,点带点权. 有\(m\)次操作,每次操作给定\(x,y\),表示修改点\(x\)的权值为\(y\). 你需要在每次操作之后求出这棵树的最大权独立集的权值大小 ...

  2. 【专题】数位DP

    [资料] ★记忆化搜索:数位dp总结 之 从入门到模板 by wust_wenhao 论文:浅谈数位类统计问题 数位计数问题解法研究 [记忆化搜索] 数位:数字从低位到高位依次为0~len-1. 高位 ...

  3. 洛谷P4719 【模板】"动态 DP"&动态树分治

    [模板]"动态 DP"&动态树分治 第一道动态\(DP\)的题,只会用树剖来做,全局平衡二叉树什么的就以后再学吧 所谓动态\(DP\),就是在原本的\(DP\)求解的问题上 ...

  4. LG5056 【模板】插头dp

    题意 题目背景 ural 1519 陈丹琦<基于连通性状态压缩的动态规划问题>中的例题 题目描述 给出n*m的方格,有些格子不能铺线,其它格子必须铺,形成一个闭合回路.问有多少种铺法? 输 ...

  5. 【专题】区间dp

    1.[nyoj737]石子合并 传送门:点击打开链接 描述    有N堆石子排成一排,每堆石子有一定的数量.现要将N堆石子并成为一堆.合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这 ...

  6. 【BZOJ4976】宝石镶嵌 DP

    [BZOJ4976]宝石镶嵌 Description 魔法师小Q拥有n个宝石,每个宝石的魔力依次为w_1,w_2,...,w_n.他想把这些宝石镶嵌到自己的法杖上,来提升法杖的威力.不幸的是,小Q的法 ...

  7. NOJ 1111 保险箱的密码 【大红】 [区间dp]

    传送门 保险箱的密码 [大红] 时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte总提交 : 118            测 ...

  8. 【CF480D】Parcels DP

    [CF480D]Parcels 题意:有一个栈,有n个物品,每个物品可以选或不选.如果选了第i个物品,则获得$v_i$的收益,且第i个物品必须在$in_i$时刻入栈,$out_i$时刻出栈.每个物品还 ...

  9. 【BZOJ3791】作业 DP

    [BZOJ3791]作业 Description 众所周知,白神是具有神奇的能力的.比如说,他对数学作业说一声“数”,数学作业就会出于畏惧而自己完成:对语文作业说一声“语”,语文作业就会出于畏惧而自己 ...

随机推荐

  1. 哪种代理适合用于Web数据采集

    在Web数据采集中为了避免被服务器封锁而通过代理下载的情况很常见.但是,并非所有的代理都适合于Web数据采集.下面是鲲鹏数据的技术人员给出的说明. 根据HTTP代理的匿名性可以将其分为以下几种:   ...

  2. struts过滤器的不同2.16以后应该是: org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 2.12以前应该是org.apache.struts2.dispatcher.Filterdispatcher

    版本不同过滤器不同.2.16以后应该是:org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter2.12以前应该是or ...

  3. excel 的几个函数使用

    =IF(表1[[#此行],[state]]="修改",        IF(                ISBLANK(                    VLOOKUP( ...

  4. 基于DDD的.NET开发框架-DDD经典分层

    DDD核心思想是由业务问题来控制解决方案的形式从以数据库为中心过渡到领域模型为中心 下面这个图是我在<领域驱动设计与模式实战>书中拍下来的,他完全诠释DDD的经典分层. 程序代码中也是响应 ...

  5. 5V转3.3v电路

    方案一: MIC5205-3.3 输出电流150ma 输出电压3.3V 其中:CT24为钽电容: 方案二: AMS1117-3.3 输出电流800ma 输出电压:3.3V 输入电压:4.75~12v

  6. Lintcode---单词的添加与查找

    设计一个包含下面两个操作的数据结构:addWord(word), search(word) addWord(word)会在数据结构中添加一个单词.而search(word)则支持普通的单词查询或是只包 ...

  7. php漏洞修复 禁用函数

    别人利用此PHP函数可以对系统进行相关操作 1.打开php.ini找到 ; http://php.net/disable-functions 2.修改添加内容如下 disable_functions ...

  8. SVN安装配置及安全注意事项

    两个脚本: svn遍历脚本.zip wooyun上也是已经有非常多的svn泄露网站信息的事件,有的甚至由此导致整个服务器沦陷: WooYun: [盛大180天渗透纪实]第四章.SVN猎手 (某站SVN ...

  9. 纹理mag filter不能取GL_XXX_MIPMAP_XXXX

    今天遇到OpenGL error 0x0500错误,定位到 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, magFilter); 查看ma ...

  10. Java并发编程(三):并发模拟(工具和Java代码介绍)

    并发模拟工具介绍 ① Postman : Http请求模拟工具 从图上我们可以看出,Postman模拟并发其实是分两步进行操作的.第一步:左边的窗口,在窗口中设置相关接口以及参数,点击运行进行第二步. ...