CF567F/51nod2522 上下序列
CF567F/51nod2522 上下序列
考虑没有限制怎么做呢,就是从小往大加数,记录加到哪个数了还有左边有多少个数,然后这个数有两个,只能是左边放两个、右边放两个、左右各放一个。(实际上就是1,1,...,n-1,n-1的不下降子序列个数。。。)
然后有限制了,只要在转移的时候顺便判一下就行了。如下:现在要放i了,然后已经放好的是[1,l),(r,n]
--------------------l---------------------------r-----------------
<i i >i i <i
注意放n的时候实际上只有一种放法但是这里dp的时候会放3种,所以最后答案除以3
f[i][j]表示现在放数i,左边放了j个数的方案数
#include<bits/stdc++.h>
#define il inline
#define vd void
#define ll long long
il int gi(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
int n,k;
ll f[37][71];
std::vector<int>a[71],b[71];
int main(){
freopen("1522.in","r",stdin);
freopen("1522.out","w",stdout);
n=gi(),k=gi();
char opt[3];int x,y,p;
for(int i=1;i<=k;++i){
scanf("%d%s%d",&x,opt,&y);
if(opt[0]=='=')p=0;
else if(opt[0]=='<'&&opt[1]=='\0')p=1;
else if(opt[0]=='<'&&opt[1]=='=' )p=2;
else if(opt[0]=='>'&&opt[1]=='\0')p=-1;
else if(opt[0]=='>'&&opt[1]=='=' )p=-2;
else puts("wrong answer!");
a[x].push_back(y),b[x].push_back(p);
a[y].push_back(x),b[y].push_back(-p);
}
f[1][0]=1;
for(int i=1;i<=n;++i)
for(int j=0;j<=(i-1)*2;++j){
int l=j+1,r=j+(n-i+1)*2;
for(int s=0;s<a[l].size();++s){
int A=a[l][s],B=b[l][s];
if((A<l||A>r)&&B>=0)goto GG1;
if((A>l+1&&A<=r)&&B<=0)goto GG1;
if((A==l||A==l+1)&&(B==1||B==-1))goto GG1;
}
for(int s=0;s<a[l+1].size();++s){
int A=a[l+1][s],B=b[l+1][s];
if((A<l||A>r)&&B>=0)goto GG1;
if((A>l+1&&A<=r)&&B<=0)goto GG1;
if((A==l||A==l+1)&&(B==1||B==-1))goto GG1;
}
f[i+1][j+2]+=f[i][j];
GG1:;
for(int s=0;s<a[r].size();++s){
int A=a[r][s],B=b[r][s];
if((A<l||A>r)&&B>=0)goto GG2;
if((A>=l&&A<r-1)&&B<=0)goto GG2;
if((A==r||A==r-1)&&(B==1||B==-1))goto GG2;
}
for(int s=0;s<a[r-1].size();++s){
int A=a[r-1][s],B=b[r-1][s];
if((A<l||A>r)&&B>=0)goto GG2;
if((A>=l&&A<r-1)&&B<=0)goto GG2;
if((A==r||A==r-1)&&(B==1||B==-1))goto GG2;
}
f[i+1][j]+=f[i][j];
GG2:;
for(int s=0;s<a[l].size();++s){
int A=a[l][s],B=b[l][s];
if((A<l||A>r)&&B>=0)goto GG3;
if((A>l&&A<r)&&B<=0)goto GG3;
if((A==l||A==r)&&(B==1||B==-1))goto GG3;
}
for(int s=0;s<a[r].size();++s){
int A=a[r][s],B=b[r][s];
if((A<l||A>r)&&B>=0)goto GG3;
if((A>l&&A<r)&&B<=0)goto GG3;
if((A==l||A==r)&&(B==1||B==-1))goto GG3;
}
f[i+1][j+1]+=f[i][j];
GG3:;
}
ll ans=0;for(int i=0;i<=n*2;++i)ans+=f[n+1][i];
printf("%lld\n",ans/3);
return 0;
}
CF567F/51nod2522 上下序列的更多相关文章
- 51NOD1522 上下序列/CF567F Mausoleum DP
题目传送门:http://codeforces.com/problemset/problem/567/F 大致题意:你有$1$到$N$的所有正整数每个数两个,现在需要你将它排成一个序列,使得序列为单峰 ...
- 【夯实PHP基础】UML序列图总结
原文地址 序列图主要用于展示对象之间交互的顺序. 序列图将交互关系表示为一个二维图.纵向是时间轴,时间沿竖线向下延伸.横向轴代表了在协作中各独立对象的类元角色.类元角色用生命线表示.当对象存在时,角色 ...
- Windows10-UWP中设备序列显示不同XAML的三种方式[3]
阅读目录: 概述 DeviceFamily-Type文件夹 DeviceFamily-Type扩展 InitializeComponent重载 结论 概述 Windows10-UWP(Universa ...
- 软件工程里的UML序列图的概念和总结
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习! 软件工程的一般开发过程:愿景分析.业务建模,需求分析,健壮性设计,关键设计,最终设计,实现…… 时序图也叫序列图(交互图),属于软件 ...
- python序列,字典备忘
初识python备忘: 序列:列表,字符串,元组len(d),d[id],del d[id],data in d函数:cmp(x,y),len(seq),list(seq)根据字符串创建列表,max( ...
- BZOJ 1251: 序列终结者 [splay]
1251: 序列终结者 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 3778 Solved: 1583[Submit][Status][Discu ...
- 最长不下降序列nlogn算法
显然n方算法在比赛中是没有什么用的(不会这么容易就过的),所以nlogn的算法尤为重要. 分析: 开2个数组,一个a记原数,f[k]表示长度为f的不下降子序列末尾元素的最小值,tot表示当前已知的最长 ...
- [LeetCode] Sequence Reconstruction 序列重建
Check whether the original sequence org can be uniquely reconstructed from the sequences in seqs. Th ...
- [LeetCode] Binary Tree Longest Consecutive Sequence 二叉树最长连续序列
Given a binary tree, find the length of the longest consecutive sequence path. The path refers to an ...
随机推荐
- LintCode,hihoCoder,LeetCode有什么区别?
https://www.zhihu.com/question/31218682 知乎用户 9 人赞同了该回答 LintCode 和LeetCode的题差不太多LintCode 有中文,不过没有用户讨论 ...
- 铁乐学python-面向对象的更多说明
以下内容摘自授课老师的博客http://www.cnblogs.com/Eva-J/ 面向对象的更多说明 面向对象的软件开发 很多人在学完了python的class机制之后,遇到一个生产中的问题,还是 ...
- spring-boot-jpa 自定义查询工具类
1.pom文件中添加如下配置 <dependency> <groupId>org.springframework.boot</groupId> <artifa ...
- ASP.NET MVC 3 Performance – on par with MVC 2
http://blogs.msdn.com/b/marcinon/archive/2011/01/17/mvc-3-performance.aspx ASP.NET MVC 3 Performance ...
- 第一次项目冲刺(Alpha版本)2017/11/17
一.当天站立式会议 会议内容 1.对数据库的设计的进一步讨论 2.讨论SSH一些配置细节 3.分配今天的任务 二.任务分解图 三.燃尽图 四.心得 刚接触冲刺,一开始任务没有分布很多,大家要一些熟悉的 ...
- U-Mail详解邮件营销优势及应用领域
最近频频有营销人员向U-Mail小编咨询:邮件营销到底有什么好处呢?与此同时,还有不少人对邮件营销存在一定的误解:邮件营销是不是只给潜在消费者发送邮件推广商品呢?其实邮件群发的应用面非常广泛,可不仅仅 ...
- 【连接】Spring事物的传播行为
http://blog.csdn.net/it_wangxiangpan/article/details/24180085 PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务, ...
- 用python解析word文件(二):table
太长了,我决定还是拆开三篇写. (一)段落篇(paragraph) (二)表格篇(table)(本篇) (三)样式篇(style) 选你所需即可.下面开始正文. 上一篇我们讲了用python-do ...
- hdu 4803 Poor Warehouse Keeper(贪心+数学)
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u011328934/article/details/26005267 题目链接:hdu 4803 P ...
- Loj #2256. 「SNOI2017」英雄联盟
题目 我就是个丝薄 如果要用\(dp_i\)表示凑出\(i\)的最小花费显然不可能的 之后大力猜想能凑出来的状态不会很多,我的暴力也告诉我不是很多,好像也确实不多的样子,大概\(4e4\)左右 但是我 ...