51 nod 1522 上下序列——序列dp

题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1522

很好的思想。考虑从小到大一对一对填数,这样也能对它的大小限制做一些操作了。

因为从小到大,所以只能全填在左边、全填在右边、两边各填一个。记录左边填到了哪个位置,就可知右边填到了哪个位置。转移之前判断一下这样填是否合法即可。

新的不合法的状态只会和现在填的两个位置有关。

注意输入格式!!符号前后有空格!!!

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int N=40,M=105;
int n,m,x[M],y[M],sgn[M],tx,ty;
ll dp[N][N<<1],ans;
char ch[20];
bool check(int p0,int p1,int r,int fx)
{//printf("p0=%d p1=%d r=%d fx=%d\n",p0,p1,r,fx);for(int i=1;i<=m;i++)if(sgn[i]==0&&( ( (x[i]==p0||x[i]==p1)&&y[i]!=p0&&y[i]!=p1)||( (y[i]==p0||y[i]==p1)&&x[i]!=p0&&x[i]!=p1) ) )return 0;//以前都合法,不合法仅出现在p0、p1位置上if(!fx){for(int i=1;i<=m;i++){//printf("sgn[%d]=%d\n",i,sgn[i]);if(sgn[i]==1||sgn[i]==2){tx=x[i];ty=y[i];if(sgn[i]==2)swap(tx,ty);//printf("tx=%d ty=%d p0=%d p1=%d r=%d\n",tx,ty,p0,p1,r);if((ty==p0||ty==p1)&&tx>=p0&&tx<r) return 0;}if(sgn[i]==3||sgn[i]==4){tx=x[i];ty=y[i];if(sgn[i]==4)swap(tx,ty);if((ty==p0||ty==p1)&&tx>p1&&tx<r) return 0;}}}if(fx==1){for(int i=1;i<=m;i++){if(sgn[i]==1||sgn[i]==2){tx=x[i];ty=y[i];if(sgn[i]==2)swap(tx,ty);if((ty==p0||ty==p1)&&tx<=p1&&tx>r) return 0;}if(sgn[i]==3||sgn[i]==4){tx=x[i];ty=y[i];if(sgn[i]==4)swap(tx,ty);if((ty==p0||ty==p1)&&tx<p0&&tx>r) return 0;}}}if(fx==2){for(int i=1;i<=m;i++){if(sgn[i]==1||sgn[i]==2){tx=x[i];ty=y[i];if(sgn[i]==2)swap(tx,ty);if((ty==p0||ty==p1)&&tx>=p0&&tx<=p1) return 0;}if(sgn[i]==3||sgn[i]==4){tx=x[i];ty=y[i];if(sgn[i]==4)swap(tx,ty);if((ty==p0||ty==p1)&&tx>p0&&tx<p1) return 0;}}}return 1;
}
int main()
{scanf("%d%d",&n,&m);ch[0]=getchar();while(ch[0]!='\n')ch[0]=getchar();for(int i=1,len=0,j;i<=m;i++,len=0){ch[++len]=getchar();while(ch[len]!='\n')ch[++len]=getchar();for(j=1;j<len;j++){if(ch[j]>='0'&&ch[j]<='9')x[i]=(x[i]<<3)+(x[i]<<1)+ch[j]-'0';else break;}while(ch[j]==' ')j++;//printf("j=%d chj=(%c)\n",j,ch[j]);if(ch[j]=='=') sgn[i]=0,j++;else if(ch[j]=='<'&&ch[j+1]=='=')sgn[i]=3,j+=2;else if(ch[j]=='>'&&ch[j+1]=='=')sgn[i]=4,j+=2;else if(ch[j]=='<')sgn[i]=1,j++;else if(ch[j]=='>')sgn[i]=2,j++;while(ch[j]==' ')j++;//printf("j=%d chj=(%c)\n",j,ch[j]);for(;j<len;j++)y[i]=(y[i]<<3)+(y[i]<<1)+ch[j]-'0';//printf("x=%d sgn=%d y=%d\n",x[i],sgn[i],y[i]);
    }dp[0][0]=1;for(int i=0,lm;i<n;i++){lm=(i<<1);for(int j=0,r;j<=lm;j++){//if(dp[i][j])printf("dp[%d][%d]=%lld\n",i,j,dp[i][j]);r=(n<<1)-(lm-j)+1;if(check(j+1,j+2,r,0))dp[i+1][j+2]+=dp[i][j];//printf("dp[%d][%d]=%lld(%d,%d)\n",i+1,j+2,dp[i+1][j+2],i,j);if(check(r-2,r-1,j,1))dp[i+1][j]+=dp[i][j];//printf("dp[%d][%d]=%lld(%d,%d)\n",i+1,j,dp[i+1][j],i,j);if(check(j+1,r-1,0,2))dp[i+1][j+1]+=dp[i][j];//printf("dp[%d][%d]=%lld(%d,%d)\n",i+1,j+1,dp[i+1][j+1],i,j);
        }}int lm=(n<<1);for(int j=0;j<=lm;j++) ans+=dp[n][j];printf("%lld\n",ans/3);return 0;
}

 

转载于:https://www.cnblogs.com/Narh/p/9672719.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/352763.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring tiles_Spring MVC 3模板和Apache Tiles

spring tiles对于任何Web应用程序&#xff0c;有效的设计考虑因素是使用模板引擎&#xff08;或工具&#xff09;&#xff0c;并且由于具有Spring的“可插拔”特性&#xff0c;集成模板机制&#xff08;例如Apache Tiles&#xff09;确实要容易得多。 在这篇简单的文章中&#…

流程图用计算机if怎么写,if语句流程图

使用if语句实现单分支、两分支和使用switch语句实现多分支的程序程序1、if 语句有下面三种情况。第一种&#xff0c;条件成立就做。不成立就不做。if (条件)程序endif第二种&#xff0c;条件成立做“程序一”&#xff0c;不成立做“程序二”。不管条件成不成立都做。if (条件)程…

CENTOS 7 踢用户_从零学ELK系列(三):Centos安装Docker(超详细图文教程)

CSDN博客地址&#xff08;关注&#xff0c;点赞&#xff09;人工智能推荐GitHub&#xff08;Star,Fork,Watch&#xff09;【前言】为了更加真实的模拟生产部署环境&#xff0c;不仅需要Linux环境支持&#xff0c;而且ELK需要在不同的机器上部署&#xff1b;再重新装几台虚拟机&…

boost开发指南

C确实很复杂&#xff0c;神一样的0x不知道能否使C变得纯粹和干爽&#xff1f; boost很复杂&#xff0c;感觉某些地方有过度设计和太过于就事论事的嫌疑&#xff0c;对实际开发工作的考虑太过于理想化。学习boost本身就是一个复杂度&#xff0c;有魄力在项目中广泛采用boost复杂…

打游戏提示计算机丢失,Windows7电脑运行某游戏提示“计算机丢失mxvcp120.dll”怎么办...

许多用户都很喜欢在windows7系统中玩一些游戏&#xff0c;而在玩游戏的时候难免碰上一些错误提示&#xff0c;比如最近有windows7系统用户发现在运行某款游戏的时候&#xff0c;提示“计算机丢失mxvcp120.dll”&#xff0c;导致无法继续玩游戏&#xff0c;要怎么解决呢&#xf…

如何开发一个可运维系统的一点体会

本文来自网易云社区作者&#xff1a;施勇我们在开发一个复杂系统的时候&#xff0c;常常会强调服务化、模块化、松散耦合等要求以达到高可用、高可靠及高性能等目的&#xff1b;比较少的人会考虑到系统的方便部署配置和运维&#xff0c;至少是在刚开始设计系统的时候很少考虑到…

工程勘察设计收费标准2002修订版_全过程工程咨询收费模式超全解析

国内全过程工程咨询试点方案中收费标准比较全过程工程咨询是近两年提出的新的工程建设组织模式&#xff0c;它的管理机制、运行方式还处于探索阶段。各试点省、市相继发布了全过程工程咨询试点工作方案&#xff0c;对全过程工程咨询收费问题进行了积极探索。笔者整理了部分省市…

Java / Web项目中的NPM模块Browser-Sync

Browser-Sync是一个方便的基于Node.js的NPM模块&#xff0c;可用于更快的Web开发。 浏览器同步可在许多设备之间同步文件更改和交互。 最重要的功能是实时重新加载。 我们也可以在Java / Web项目中使用Browser-Sync。 Cagatay Civici创造了一个伟大的 视频教程如何在PrimeFace…

设置vs2008代码区的背景色

编写程序、调试代码时&#xff0c;是不是感觉文字的白色背景有些刺眼呢&#xff1f;vs2008 给我们提供了改变背景色的功能。 依次展开&#xff1a;工具->选项->环境->字体和颜色&#xff0c;可以看到下图所示设置框。 首先&#xff0c;在图中标记的“显示项”一栏选择…

bzoj3277 串 (后缀数组+二分答案+ST表)

常见操作&#xff1a;先把所有串都连到一起&#xff0c;但中间加上一个特殊的符号&#xff08;不能在原串中/出现过&#xff09;作为分割 由于全部的子串就等于所有后缀的所有前缀&#xff0c;那我们对于每一个后缀&#xff0c;去求一个最长的前缀&#xff0c;来满足这个前缀在…

微型计算机实验报告温度控制,单片机、可编程控制器实验教学大纲.doc

单片机、可编程控制器实验教学大纲.doc单片机、可编程控制器实验教学大纲 一、实验课的性质与任务 本实验课是在学生学完单片机原理与应用课程之后&#xff0c;为巩固提高所学知识&#xff0c;而安排的一次综合设计实验。通过本实验使学生将所学的单片机硬件结构、工作原理、编…

电脑word在哪_Word论文里的公式怎么编辑?这4个小工具帮你一分钟搞定!

临近毕业时&#xff0c;不少小可爱都在为论文头秃&#xff01;搜索并下载论文&#xff0c;论文排版&#xff0c;论文查重&#xff0c;这些我们之前已经写过相关文章啦&#xff01;Tools指南推荐搜索论文论文排版论文查重论文网站今天&#xff0c;再来给大家分享一个写论文时经常…

RTree算法及介绍

空间索引是对存储在介质上的数据位置信息的描述&#xff0c;用来提高系统对数据获取的效率。GIS涉及的各种海量复杂数据存储于外存&#xff0c;如果对磁盘上的数据的位置不加以记录和组织&#xff0c;每查询一个数据项都要扫描整个数据文件&#xff0c;则这种访问磁盘的代价将严…

文件桌面跟计算机同步删除吗,电脑里桌面文件被不慎覆盖了如何恢?

2007-10-30如何恢复桌面图标不小心将某个程序的桌面Windows桌面图标是启动计算机一定程序或文档的开关,Windows桌面的图标分为两类&#xff1a;快捷图标和默认图标。快捷图标主要由应用程序安装时自动创建或计算机使用者人为创建&#xff0c;用一个从左下向右上斜指的小箭头来标…

win10易升_微软Win10版本20H2正式版官方ISO镜像下载大全_windows10_Windows系列_操作系统...

10月21日&#xff0c;微软推送了 Windows 10 十月更新版 20H2 系统更新。我个人认为微软 Win10 版本 20H2 正式版官方 ISO 镜像下载大全&#xff1a;此次系统版本(20H2)更新相对于上一版 20H1 正式版&#xff0c;这次十月更新的 20H2 正式版可能是很棒的一个版本&#xff0c;因…

乐观锁的两种实现方式

什么场景下需要使用锁&#xff1f; 在多节点部署或者多线程执行时&#xff0c;同一个时间可能有多个线程更新相同数据&#xff0c;产生冲突&#xff0c;这就是并发问题。这样的情况下会出现以下问题&#xff1a;更新丢失&#xff1a;一个事务更新数据后&#xff0c;被另一个更新…

c++编译时候fatal error C1075: end of file found before the left brace '{' at

出现 C:\Users\acer\Downloads\Cpp2.cpp(591) : fatal error C1075: end of file found before the left brace { at C:\Users\acer\Downloads\Cpp2.cpp(357) was matched 执行 cl.exe 时出错. 谁知道怎么求改&#xff1f;&#xff1f; 答&#xff1a; 程序中 {} 不是成对出现…

Cloud Foundry Java客户端–流事件

Cloud Foundry Java客户端提供了基于Java的绑定&#xff0c;用于与正在运行的Cloud Foundry实例进行交互。 这个项目的优点之一是它采用了基于Reactive Stream的API作为方法签名&#xff0c;特别是使用Reactor实现&#xff0c;这在使用流数据时特别有用。 在这篇文章中&#x…

vue导入html登陆页,Vue 实现 登陆后打开主页面(登陆组件 + 主页面组件)

本次演示&#xff0c;项目所需iview&#xff0c;router首先在 views 目录 新建 两个 组件 ( login.vue &#xff0c;index.vue )login.vue登录登 录export default {methods: {login() {// 假设登陆成功&#xff0c;则跳转到 index 组件this.$router.replace(/index);}}}backgr…

设置窗口大小

window.resizeTo(screen.availWidth, screen.availHeight);转载于:https://www.cnblogs.com/7q4w1e/p/9680037.html