B - Byteland Trip

题目大意:给你一个由'<' 和 '>'组成的串, 如果在'<' 只能前往编号比它小的任意点, 反之只能前往比它大的任意点,问你能遍历所有点

并且每个点只走一次终点在各个位置的方案数。

思路:感觉这种右能从左边跑到右边又跑回来的dp很难搞,如果我们确定一个终点, 如果知道它左边点一共出来几次,右边的点一共出来几次

那么方案数就很好求了, 所以我们定义dp1[ i ][ j ] 表示前 i 个点,遍历所有点并且向右出去 j 次的的方案数, dp2[ i ][ j ]就是反过来的。

对于每个点,我们枚举左边出来几次就好啦。

#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define PII pair<int, int>
#define PLI pair<LL, int>
#define ull unsigned long long
using namespace std; const int N = ;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + ;
const double eps = 1e-; int n, m;
LL dp1[N][N], dp2[N][N], f[N], ans[N];
char s[N]; void add(LL &a, LL b) {
a += b; if(a >= mod) a -= mod;
} int main() {
for(int i=f[]=; i < N; i++) f[i] = f[i-]*i%mod;
scanf("%s", s + );
m = strlen(s + );
for(int i = ; i <= m; i++)
if(s[i] == '<' || s[i] == '>') s[++n] = s[i];
if(n == ) {
puts("");
return ;
}
dp1[][] = ;
for(int i = ; i <= n; i++) {
for(int j = ; j <= i; j++) {
if(s[i] == '<') {
add(dp1[i][j], dp1[i-][j]*j%mod);
add(dp1[i][j], dp1[i-][j+]*(j+)%mod*j%mod);
} else {
if(j) add(dp1[i][j], dp1[i-][j-]);
add(dp1[i][j], dp1[i-][j]*j%mod);
}
}
}
dp2[n+][] = ;
for(int i = n; i >= ; i--) {
for(int j = ; j <= n-i+; j++) {
if(s[i] == '<') {
if(j) add(dp2[i][j], dp2[i+][j-]);
add(dp2[i][j], dp2[i+][j]*j%mod);
} else {
add(dp2[i][j], dp2[i+][j]*j%mod);
add(dp2[i][j], dp2[i+][j+]*(j+)%mod*j%mod);
}
}
}
ans[] = dp2[][];
ans[n] = dp1[n-][];
for(int i = ; i < n; i++) {
for(int j = ; j < i; j++) {
add(ans[i], dp1[i-][j]*dp2[i+][j]%mod*f[j]%mod*f[j]%mod*%mod);
add(ans[i], dp1[i-][j]*dp2[i+][j+]%mod*f[j]%mod*f[j+]%mod);
if(j > ) add(ans[i], dp1[i-][j]*dp2[i+][j-]%mod*f[j]%mod*f[j-]%mod);
}
}
for(int i = ; i <= n; i++) printf("%lld ", ans[i]);
return ;
} /*
*/

2017-2018 ACM-ICPC, NEERC, Moscow Subregional Contest B - Byteland Trip dp的更多相关文章

  1. 2018-2019 ICPC, NEERC, Southern Subregional Contest

    目录 2018-2019 ICPC, NEERC, Southern Subregional Contest (Codeforces 1070) A.Find a Number(BFS) C.Clou ...

  2. Codeforces 2018-2019 ICPC, NEERC, Southern Subregional Contest

    2018-2019 ICPC, NEERC, Southern Subregional Contest 闲谈: 被操哥和男神带飞的一场ACM,第一把做了这么多题,荣幸成为7题队,虽然比赛的时候频频出锅 ...

  3. ACM ICPC 2015 Moscow Subregional Russia, Moscow, Dolgoprudny, October, 18, 2015 G. Garden Gathering

    Problem G. Garden Gathering Input file: standard input Output file: standard output Time limit: 3 se ...

  4. ACM ICPC 2015 Moscow Subregional Russia, Moscow, Dolgoprudny, October, 18, 2015 D. Delay Time

    Problem D. Delay Time Input file: standard input Output file: standard output Time limit: 1 second M ...

  5. 2016 NEERC, Moscow Subregional Contest K. Knights of the Old Republic(Kruskal思想)

    2016 NEERC, Moscow Subregional Contest K. Knights of the Old Republic 题意:有一张图,第i个点被占领需要ai个兵,而每个兵传送至该 ...

  6. 2018.10.20 2018-2019 ICPC,NEERC,Southern Subregional Contest(Online Mirror, ACM-ICPC Rules)

    i207M的“怕不是一个小时就要弃疗的flag”并没有生效,这次居然写到了最后,好评=.= 然而可能是退役前和i207M的最后一场比赛了TAT 不过打得真的好爽啊QAQ 最终结果: 看见那几个罚时没, ...

  7. 2018-2019 ICPC, NEERC, Southern Subregional Contest (Online Mirror) Solution

    从这里开始 题目列表 瞎扯 Problem A Find a Number Problem B Berkomnadzor Problem C Cloud Computing Problem D Gar ...

  8. 2010-2011 ACM-ICPC, NEERC, Moscow Subregional Contest Problem D. Distance 迪杰斯特拉

    Problem D. Distance 题目连接: http://codeforces.com/gym/100714 Description In a large city a cellular ne ...

  9. 2010-2011 ACM-ICPC, NEERC, Moscow Subregional Contest Problem C. Contest 水题

    Problem C. Contest 题目连接: http://codeforces.com/gym/100714 Description The second round of the annual ...

随机推荐

  1. NandFlash、NorFlash、DataFlash、SDRAM释义

    1. NandFlash和NorFlash       Flash存储芯片,俗称闪存,因其具有非易失性.可擦除性.可重复编程及高密度.低功耗等特点,广泛地应用于手机.数码相机.笔记本电脑等产品.    ...

  2. 用rem做响应式开发

    设置对应的响应式的html rem比例 rem就是根元素(即:html)的字体大小.html中的所有标签样式凡是涉及到尺寸的(如: height,width,padding,margin,font-s ...

  3. Java锁及AbstractQueuedSynchronizer源码分析

    一,Lock 二,关于锁的几个概念 三,ReentrantLock类图 四,几个重要的类 五,公平锁获取 5.1 lock 5.2 acquire 5.3 tryAcquire 5.3.1 hasQu ...

  4. Ubuntu16.04.2安装Tensorflow

    安装aptitude $ sudo apt-get install aptitude 安装python-pip python-dev $ sudo aptitude install python-pi ...

  5. pandas 视频讲座 from youtube

    Stephen Simmons - Pandas from the inside - YouTube https://www.youtube.com/watch?v=Dr3Hv7aUkmU 2016年 ...

  6. [整理]LumiSoft.Net 开源组件

    http://www.lumisoft.ee/lsWWW/download/downloads/Net/info.txt SVN: https://svn.lumisoft.ee:8443/svn/L ...

  7. 判别式模型 vs. 生成式模型

    1. 简介 生成式模型(generative model)会对\(x\)和\(y\)的联合分布\(p(x,y)\)进行建模,然后通过贝叶斯公式来求得\(p(y|x)\), 最后选取使得\(p(y|x) ...

  8. 约翰·卡马克和他的id Software

    John Carmack 上帝花了6天创造了这个世界,id software和它的创始人.引擎师约翰·卡马克(John Carmack),则用6款游戏创造了个人电脑的3D世界. 1992年,id做出了 ...

  9. 20145226夏艺华 《Java程序设计》第6周学习总结

    教材学习内容总结 学习目标 理解流与IO 理解InputStream/OutPutStream的继承架构 理解Reader/Writer继承架构 会使用装饰类 会使用多线程进行并发程序设计 第十章 输 ...

  10. 【树】ztree

    ztree前端参见官网http://www.ztree.me/v3/main.php Action示例 public String initLabServerTree(){ return SUCCES ...