深度优先搜索(dfs)

【题目描述】

sol:50pts随便写写,就是大众分了,直接n2dpOK,100分要找点规律,需要数学头脑

官方题解

//#include <bits/stdc++.h>
//using namespace std;
//typedef long long ll;
//inline ll read()
//{
// ll s=0;
// bool f=0;
// char ch=' ';
// while(!isdigit(ch))
// {
// f|=(ch=='-'); ch=getchar();
// }
// while(isdigit(ch))
// {
// s=(s<<3)+(s<<1)+(ch^48); ch=getchar();
// }
// return (f)?(-s):(s);
//}
//#define R(x) x=read()
//inline void write(ll x)
//{
// if(x<0)
// {
// putchar('-'); x=-x;
// }
// if(x<10)
// {
// putchar(x+'0'); return;
// }
// write(x/10);
// putchar((x%10)+'0');
// return;
//}
//#define W(x) write(x),putchar(' ')
//#define Wl(x) write(x),putchar('\n')
//const int N=3005;
//const ll Mod=1000000007;
//int n,a[N];
//ll dp[N][N],Sum[N];
//inline void Ad(ll &x,ll y) {x=x+y; x-=(x>=Mod)?Mod:0;}
//int main()
//{
// freopen("dfs.in","r",stdin);
// freopen("dfs.out","w",stdout);
// int i,j;
// R(n);
// for(i=1;i<=n;i++) R(a[i]);
// if((a[1]!=-1)&&(a[1]!=0)) return puts("0"),0;
// dp[1][0]=1; Sum[n+1]=0; for(i=n;i>=0;i--) Ad(Sum[i],Sum[i+1]+dp[1][i]);
// for(i=2;i<=n;i++)
// {
// if(a[i]!=-1) Ad(dp[i][a[i]],Sum[a[i]-1]);
// else for(j=1;j<=n;j++) Ad(dp[i][j],Sum[j-1]);
// for(j=n;j>=0;j--) {Sum[j]=Sum[j+1]+dp[i][j]; Sum[j]-=((Sum[j]>=Mod)?Mod:0);}
// }
// ll ans=0;
// for(i=0;i<=n;i++) Ad(ans,dp[n][i]);
// Wl(ans);
// return 0;
//}
///*
//input
//2
//1 -1
//output
//0
//
//input
//4
//0 -1 1 -1
//output
//2
//
//input
//5
//-1 -1 -1 -1 -1
//output
//14
//*/ #include <bits/stdc++.h>
using namespace std;
typedef long long ll;
inline ll read()
{
ll s=;
bool f=;
char ch=' ';
while(!isdigit(ch))
{
f|=(ch=='-'); ch=getchar();
}
while(isdigit(ch))
{
s=(s<<)+(s<<)+(ch^); ch=getchar();
}
return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{
if(x<)
{
putchar('-'); x=-x;
}
if(x<)
{
putchar(x+''); return;
}
write(x/);
putchar((x%)+'');
return;
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
const ll Mod=;
const int N=;
int n,a[N];
ll Jiec[N],Invj[N];
inline ll Ksm(ll x,ll y)
{
ll ans=;
while(y)
{
if(y&) ans=ans*x%Mod;
x=x*x%Mod;
y>>=;
}
return ans;
}
inline ll C(ll n,ll m)
{
if(n<m||m<) return ;
return Jiec[n]*Invj[m]%Mod*Invj[n-m]%Mod;
}
int main()
{
freopen("dfs.in","r",stdin);
freopen("dfs.out","w",stdout);
ll i,Last,ans;
R(n);
for(i=;i<=n;i++) R(a[i]);
Jiec[]=Invj[]=1ll;
for(i=;i<=*n;i++)
{
Jiec[i]=Jiec[i-]*i%Mod; Invj[i]=Ksm(Jiec[i],Mod-);
}
if((a[]!=)&&(a[]!=-)) return puts(""),;
a[]=; Last=ans=a[n+]=;
for(i=;i<=n+;i++) if(a[i]!=-)
{
if(a[i]==) return puts(""),;
int s=i-Last-,x=i-Last--a[i]++a[Last];
if(x<) return puts(""),;
ans=1ll*ans*(C(s+x,x)-C(s+x,x-a[Last]-))%Mod;
Last=i;
}
ans+=(ans<)?Mod:;
Wl(ans);
return ;
}
/*
input
6
-1 -1 -1 -1 -1 -1
output
42
*/

7.6 T1 深度优先搜索(dfs)的更多相关文章

  1. 深度优先搜索DFS和广度优先搜索BFS简单解析(新手向)

    深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每个点仅被访问一次,这个过程就是图的遍历.图的遍历常用的有深度优先搜索和广度优先搜索,这两者对于有向图和无向图 ...

  2. 利用广度优先搜索(BFS)与深度优先搜索(DFS)实现岛屿个数的问题(java)

    需要说明一点,要成功运行本贴代码,需要重新复制我第一篇随笔<简单的循环队列>代码(版本有更新). 进入今天的主题. 今天这篇文章主要探讨广度优先搜索(BFS)结合队列和深度优先搜索(DFS ...

  3. 深度优先搜索DFS和广度优先搜索BFS简单解析

    转自:https://www.cnblogs.com/FZfangzheng/p/8529132.html 深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每 ...

  4. 【算法入门】深度优先搜索(DFS)

    深度优先搜索(DFS) [算法入门] 1.前言深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一个顶点V0开始,沿着一条路一直走到底,如果发现不能到达目标解 ...

  5. 深度优先搜索 DFS 学习笔记

    深度优先搜索 学习笔记 引入 深度优先搜索 DFS 是图论中最基础,最重要的算法之一.DFS 是一种盲目搜寻法,也就是在每个点 \(u\) 上,任选一条边 DFS,直到回溯到 \(u\) 时才选择别的 ...

  6. 深度优先搜索(DFS)

    [算法入门] 郭志伟@SYSU:raphealguo(at)qq.com 2012/05/12 1.前言 深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一 ...

  7. 算法总结—深度优先搜索DFS

    深度优先搜索(DFS) 往往利用递归函数实现(隐式地使用栈). 深度优先从最开始的状态出发,遍历所有可以到达的状态.由此可以对所有的状态进行操作,或列举出所有的状态. 1.poj2386 Lake C ...

  8. HDU(搜索专题) 1000 N皇后问题(深度优先搜索DFS)解题报告

    前几天一直在忙一些事情,所以一直没来得及开始这个搜索专题的训练,今天做了下这个专题的第一题,皇后问题在我没有开始接受Axie的算法低强度训练前,就早有耳闻了,但一直不知道是什么类型的题目,今天一看,原 ...

  9. [LeetCode OJ] Word Search 深度优先搜索DFS

    Given a 2D board and a word, find if the word exists in the grid. The word can be constructed from l ...

随机推荐

  1. 16-Perl 文件操作

    1.Perl 文件操作Perl 使用一种叫做文件句柄类型的变量来操作文件.从文件读取或者写入数据到文件需要使用文件句柄.文件句柄(file handle)是一个I/O连接的名称.Perl提供了三种文件 ...

  2. 7.bash作业控制

    7.作业控制本节讨论作业控制是什么.它怎么工作.以及 Bash 里面怎么使用这些功能7.1 作业控制基础作业控制是指有选择的停止(暂停)并在后来继续(恢复)执行某个进程的能力.通常,用户通过 Bash ...

  3. .net get set用法

    在早期学习c#的过程中,经常遇到这样的语句: public string StudentName{           get{return stuName;}           set{stuNa ...

  4. UDP通信简单 小结

    Android手机版和电脑版 效果图: 通过WiFi局域网 电脑和手机连接通信. 电脑版本和手机版本使用了相同的消息发送头协议, 可以相互接收消息. 若有做的不好的地方还希望大家指导一下. 1. 手机 ...

  5. 设计模式及UML图

    UML图 1. 依赖关系

  6. 在webstorm中编译less,以及压缩css

    一.编译   在全局安装less npm install -g less 在webstorm setting ->tools -> filewatcher中设置 :  ../css/$Fi ...

  7. Fescar锁和隔离级别的理解

    前几天夜里,我老大发我一篇文章说阿里的GTS开源了. 因为一直对分布式事务比较感兴趣,立马pull了代码,进行阅读.基本的原理,实现方案我就不一一细化了,详细见官方文档(写的很棒,点赞). 在fesc ...

  8. Delphi 图像组件(Image)

    樊伟胜

  9. [ZOJ 4025] King of Karaoke

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5766 求两个序列的相对元素的差出现次数最多的,最低出现一次. AC代 ...

  10. C++第五次作业--运算符重载和函数重载

    C++ 运算符重载和函数重载 C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载. 重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是 ...