深度优先搜索(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. Wannafly挑战赛24

    A. 石子游戏 Alice和Bob在玩游戏,他们面前有n堆石子,对于这些石子他们可以轮流进行一些操作,不能进行下去的人则输掉这局游戏.可以进行两种操作:1. 把石子数为奇数的一堆石子分为两堆正整数个石 ...

  2. linux常用的bash指令

    文本处理 awk sed grep sort uniq cat cut echo fmt tr nl egrep fgrep wc 进程监视 ps top htop atop lsof 网络 nmap ...

  3. git、github常用操作

    1.将github项目拷贝到本地 $ git clone https://github.com/jim2500/miaosha_project.git 2.修改本地项目上传到github T470s@ ...

  4. OGG学习笔记03

    OGG学习笔记03-单向复制简单故障处理 环境:参考:OGG学习笔记02-单向复制配置实例实验目的:了解OGG简单故障的基本处理思路. 1. 故障现象故障现象:启动OGG源端的extract进程,da ...

  5. 我要研究一下minio,管理大量的照片

    随着年龄的增长,电脑里的照片越来越多了,管理和浏览也越来越困难了.

  6. python之时间日期time

    常用的时间函数如下获取当前日期:time.time()获取元组形式的时间戳:time.local(time.time())格式化日期的函数(基于元组的形式进行格式化):time.asctime(tim ...

  7. Linux服务器开发:工具

    预处理 将所有#defined删除,并且展开 处理所有条件预处理指令 处理#include,将被包含的文件插入到该预编译指令的位置 过滤所有的//./**/ 保留所有#pragma编译指令 编译 词法 ...

  8. 怎么处理系统蓝屏后提示代码0x000000d1的错误?

    电脑开机有时会出现蓝屏,导致蓝屏的原因有很多,每种错误都有不同的代码.下面就来和大家分享一下电脑开机蓝屏出现0x000000d1错误代码是什么原因?我们又该怎么去解决这个问题. 电脑开机蓝屏出现0x0 ...

  9. ios系统保存校园网密码

    相信ios用户每次登陆时无法保存必须要重新输入账号密码的问题困扰了很多同学,特别是苹果5用户(不要问为什么,屏幕本来就小) 现在我们就一起想办法来解决它吧! 首先,我们进入设置->Safari浏 ...

  10. 【转载】MCMC和Gibbs Sampling算法

    转载随笔,原贴地址:MCMC和Gibbs Sampling算法 本文是整理网上的几篇博客和论文所得出来的,所有的原文连接都在文末. 在科学研究中,如何生成服从某个概率分布的样本是一个重要的问题.如果样 ...