两个函数相同等价于不存在长度为$3$的下降子序列。

先考虑随意填的部分,设$f[i][j]$表示考虑了$[i,n]$,下降子序列第$2$项的最小值的是这里面第$j$个的方案数,转移则考虑往序列里插数字,可以通过后缀和优化到$O(n^2)$。

然后考虑已固定的部分,设$g[i][j]$表示考虑了$[i,n]$,下降子序列第$2$项的最小值是$j$的方案数,因为填法唯一,所以直接转移即可。

时间复杂度$O(n^2)$。

#include<cstdio>
const int N=2005,P=1000000007;
int n,m,i,j,k,flag,a[N],v[N],b[N],cnt,f[N][N],s[N][N],g[N][N],ans;
int main(){
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)scanf("%d",&a[i]),v[a[i]]=1;
f[n][0]=1;
for(i=n-1;i>m;i--){
for(j=n-i+1;j>1;j--)f[i][j]=(s[i+1][j-1]+1)%P;
for(j=n;j;j--)s[i][j]=(s[i][j+1]+f[i][j])%P;
f[i][0]=1;
}
if(!m){
for(i=0;i<=n;i++)ans=(ans+f[1][i])%P;
return printf("%d",ans),0;
}
for(i=1;i<=n;i++)if(!v[i])b[++cnt]=i;
for(i=0;i<=n-m;i++)g[m+1][b[i]]=f[m+1][i];
if(m==n)g[n+1][0]=1;
for(i=m;i;i--){
for(flag=1,j=i+1;j<=m;j++)if(a[i]>a[j]){flag=0;break;}
for(j=1;j<=cnt;j++)if(a[i]>b[j]){flag=0;break;}
for(j=0;j<=n;j++){
if(j&&a[i]>j)continue;
if(flag)k=flag?j:a[i];
g[i][k]=(g[i][k]+g[i+1][j])%P;
}
}
for(i=0;i<=n;i++)ans=(ans+g[1][i])%P;
return printf("%d",ans),0;
}

  

BZOJ3692 : 愚蠢的算法的更多相关文章

  1. 福建省队集训被虐记——DAY4

    啊啊啊啊啊啊第四天考的是我最不擅长的图论--整个人都斯巴达了 //另外不得不吐槽下午的上课讲的都是网络流--难道是出题人觉得图论里除了网络流以外的其他算法都没有人权图样图森破? 愚蠢的算法(clums ...

  2. 坑爹的InetAddress getLocalHost函数

    今天在跑dubbo 的 DemoService 2.5.4-SNAPSHOT版本的时候,遇到到一个奇怪的问题.consumer怎么都连接不上provider的服务.最后才发现是由于dubbo自 己实现 ...

  3. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  4. noip2018——题解&总结

    近期正在疯狂复习某些东西,这篇博客尽量年底更完……(Day2T2除外) 好了,所有的希望都破灭了,原来这就是出题人的素质.——一个被欺骗的可怜 $OIer$ 人生中倒数第三次 $noip$ (Mayb ...

  5. PageRank算法简介及Map-Reduce实现

    PageRank对网页排名的算法,曾是Google发家致富的法宝.以前虽然有实验过,但理解还是不透彻,这几天又看了一下,这里总结一下PageRank算法的基本原理. 一.什么是pagerank Pag ...

  6. lecture13-BP算法的讨论和置信网

    这是HInton课程第13课,这一课有两篇论文可以作为课外读物<Connectionist learning of belief networks>和<The wake-sleep ...

  7. 浅析初等贪吃蛇AI算法

    作为小学期程序设计训练大作业的一部分,也是自己之前思考过的一个问题,终于利用小学期完成了贪吃蛇AI的一次尝试,下作一总结. 背景介绍: 首先,我针对贪吃蛇AI这一关键词在百度和google上尽心了检索 ...

  8. 算法手记 之 数据结构(线段树详解)(POJ 3468)

    依然延续第一篇读书笔记,这一篇是基于<ACM/ICPC 算法训练教程>上关于线段树的讲解的总结和修改(这本书在线段树这里Error非常多),但是总体来说这本书关于具体算法的讲解和案例都是不 ...

  9. 【经典算法】——KMP,深入讲解next数组的求解

    我们在一个母字符串中查找一个子字符串有很多方法.KMP是一种最常见的改进算法,它可以在匹配过程中失配的情况下,有效地多往后面跳几个字符,加快匹配速度. 当然我们可以看到这个算法针对的是子串有对称属性, ...

随机推荐

  1. 清除Windows系统桌面快捷方式小箭头

    清除Windows桌面快捷方式小箭头,需要重启,且不会导致软件无法锁定到任务栏.新建.reg的注册表文件,命名随意,内容如下: Windows Registry Editor Version 5.00 ...

  2. ld: framework not found AGCommon 关于三方库到入 问题解决方案!!

    ld: framework  not found AGCommon clang:error:linker command failed with exit code 1 (use -v to see ...

  3. HTTP长连接和短连接原理浅析

    原文出自:HTTP长连接和短连接原理浅析

  4. *** Assertion failure in -[UIApplication _runWithMainScene:transitionContext iOS9.1闪退问题解决

    错误原因在于 AppDelegate 中 didFinishLaunchingWithOptions 结束前 未定义 rootViewController,Xcode7规定必须要有rootViewCo ...

  5. Android缓存学习入门(二)

    本文主要包括以下内容 内存缓存策略 文件缓存策略 内存缓存策略 当有一个图片要去从网络下载的时候,我们并不会直接去从网络下载,因为在这个时代,用户的流量是宝贵的,耗流量的应用是不会得到用户的青睐的.那 ...

  6. mysql入门语句10条

    1,连接数据库服务器 mysql  -h host   -u root   -p  xxx(密码) 2,查看所有库 show databases; 3,选库 use 库名 4,查看库下面的表 show ...

  7. android 5.1 WIFI图标上的感叹号及其解决办法

    转自:http://blog.csdn.net/w6980112/article/details/45843129 第一次调试android5.1的 WIFI更改小功能 Wifi 源码的相关路径目录  ...

  8. 【翻译三】java-并发之线程对象和实现

    Thread Objects Each thread is associated with an instance of the class Thread. There are two basic s ...

  9. Spring+Hibernate+Oracle中的Clob操作配置

    bean对象配置: <!-- 此处用于指定当前JDBC的实现,详见下面注解① --> <bean id="nativeJdbcExtractor" class=& ...

  10. C# 重绘tabControl,添加关闭按钮(续)

    在上一篇随笔中,添加关闭按钮是可以实现 ,但细心一点就会发现,每次关闭一个选项卡,tableControl都会自动跳到第一个页面,显然 这不是我们想要的,为此,我修改了部分的代码.除此之外,我还添加了 ...