[usaco6.1.1Postal Vans]
来自FallDream的博客,未经允许,请勿转载,谢谢。
给你一个4*n的棋盘,问从(1,1)出发恰好经过所有格子一次的走法数量.(n<=1000)
插头dp,用f[i][j][k]表示转移到第i行第j列,插头的状态是k的方案数,套上高精度。
假设要转移到格子(i,j) 前一个格子的右插头是p,上一个格子的下插头是q,
p和q都没有插头时,现在这个格子显然只能有向右和向下的插头,插头状态变成()
p和q只有一个有插头时,一个插头只能与这个插头对接,另一个插头可右可下,分别转移
pq都有插头的时候,显然只能和这两个插头对接,考虑维护联通性。
如果两个插头是(),那么会形成一个环,只有在最后一个格子才能转移。
如果两个插头是((或者)),这两个联通块被合并,把这两个插头去掉,然后把他们匹配的两个相同的插头改成()即可。
如果这两个插头是)(,那么直接去掉这两个插头即可。
插头的状态可以与处理,总共只有21种,复杂度O(4*n*21*高精度)
#include<iostream> #include<cstdio> #include<cstring> #include<iomanip> #define MN 2200 #define mod 1000000000 using namespace std; inline int read() {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; }struct Hpc {int len,s[100];void init(int x){memset(s,0,sizeof(int)*(len+1));s[1]=x;len=(x>0);}void operator += (Hpc y){len=max(len,y.len)+1;for(int i=1;i<=len;++i){s[i]+=y.s[i];if(s[i]>=mod){s[i+1]+=s[i]/mod;s[i]%=mod;}}if(!s[len]) --len;}void print(){printf("%d",s[len]);for(int i=len-1;i>0;--i)cout<<setw(9)<<setfill('0')<<s[i];} }f[5][1<<12],ans; int n,tot=0,s[MN+5],c[MN+5][8],q[8],top;int main() {n=read();f[4][0].init(1);for(int i=0;i<1<<(4<<1)+2;++i){s[++tot]=i;top=0;for(int j=0;j<=4;++j){int x=i>>(j<<1);if((x&3)==3) {top=-1;break;}if((x&3)==1) q[++top]=j;if((x&3)==2){if(!top) {top=-1;break;}else c[tot][q[top]]=j,c[tot][j]=q[top],--top;}}if(top) --tot;}for(int i=1;i<=n;++i){for(int j=1;j<=tot;++j){if(s[j]&3) f[0][s[j]].init(0);else f[0][s[j]]=f[4][s[j]>>2];}for(int j=1;j<=4;++j){int x=(j-1)<<1;memset(f[j],0,sizeof(f[j]));for(int k=1;k<=tot;++k){int p=(s[k]>>x)&3;int q=(s[k]>>(x+2))&3;if(!p&&!q) f[j][s[k]|(9<<x)]+=f[j-1][s[k]];else if(p&&q){if(p==1&&q==2){if(i==n&&j==4&&s[k]==(9<<x)) ans+=f[j-1][s[k]];}else if(p==1&&q==1)f[j][s[k]^(5<<x)^(3<<(c[k][j]<<1))]+=f[j-1][s[k]];else if(p==2&&q==1) f[j][s[k]^(6<<x)]+=f[j-1][s[k]];else if(p==2&&q==2) f[j][s[k]^(10<<x)^(3<<(c[k][j-1]<<1))]+=f[j-1][s[k]];}else{f[j][s[k]]+=f[j-1][s[k]];f[j][(s[k]^(p<<x)^(q<<x+2))|(p<<x+2)|(q<<x)]+=f[j-1][s[k]];}}}}ans+=ans;ans.print();return 0; }
转载于:https://www.cnblogs.com/FallDream/p/usacoPostalVans.html
[usaco6.1.1Postal Vans]相关推荐
- 9型人格人口占比数据_数据人格
9型人格人口占比数据 Big Tech companies make money by mining your data. They refine this data using machine le ...
- 怎么保证自动化脚本没有问题_质量保证将使设计变得自动化
怎么保证自动化脚本没有问题 As changes in the world pick up speed, machine learning pioneers steer new technologic ...
- 那个时候我不小心建立了一个间谍应用
In the fall of 2007, my parents gave me an unforgettable gift for my sixteenth birthday: a first-gen ...
- bit1618c 功能简介_c 9中的新功能简介
bit1618c 功能简介 With the upcoming release of .NET 5 - the release which unifies the .NET runtimes - Mi ...
- Florian%C3%B3polis巴西北岸新业务的最佳场所四方数据分析
Introduction 介绍 The Background 的背景 Brazil is known for Rio de Janeiro or São Paulo. But one of the m ...
- 智能对话需求_我们是否已经超过了智能手机的需求?
智能对话需求 重点 (Top highlight) This past spring, the notion of personal time was reintroduced to the Unit ...
- usaco Postal Vans(dp)
是哈密顿回路,然后...就不知道怎么写了 ,以前写过类似的不过情况没这么多也没这么复 usaco training 6.1.1 Postal Vans 题解 标签: usaco training题解d ...
- 是vans_你知道VANS有哪些好鞋不贵系列?
Vans好看.经典还经常打折啊!本vans鞋狗强烈推荐90块2双的vans的汽水系列,还有35元的vans小白鞋.72元的棋盘格! 今年vans的折扣力度真的相当猛!随意放张10月份的折扣图你们感受一 ...
- [外文理解] DDD创始人Eric Vans:要实现DDD原始意图,必须CQRS+Event Sourcing架构。
原文:http://www.infoq.com/interviews/Technology-Influences-DDD# 要实现DDD(domain drive design 领域驱动设计)原始意 ...
最新文章
- 恭贺《构建高可用Linux服务器》荣获几项殊荣
- eclipse安装weblogic Server服务器
- maven学习6 Eclipse下Tomcat常用设置
- java和python哪个编程好找工作_学编程选Python还是Java?就业发展哪个好??
- [deviceone开发]-do_SlideListView的简单示例
- JeeSite 企业信息化快速开发平台
- 利用Python进行数据分析--数据聚合与分组运算
- mysql8从入门到精通电子书_MySQL 8从入门到精通(视频教学版)
- 分享76网络科技88教育教学47公司企业PPT模板
- 高中计算机技术基础教学ppt,高中信息技术教学课件
- 【4G通讯模组相关】 TCPIP连接本地电脑测试 、内网穿透
- 对封装的ajax的应用-查询商铺
- 用文氏图表示映射满射单射及函数的关系
- 精品电子书分享 – 《JavaScript Enlightenment.PDF》
- JavaScript实现五种排序算法
- 跳转到三方App ,三方App 是如何返回自己的App的
- css如何选择同一个class下的第一个div?
- js打印三角形超详解
- SAP中物料报废无法确定账户问题处理实例
- 解决工作流:org.activiti.engine.ActivitiException: Unknown property used in expression: ${AAAAA}报错
热门文章
- 新能源汽车,车架号VIN码查询接口
- pc端不同分辨率适配
- 魅族便签,是否能成为国内便签应用的No.1?
- 今日头条阅读量怎么刷_今日头条推广 今日头条阅读量怎么刷
- Air202掉坑日记(2)——连接阿里云成功后自动掉线(AT版本)
- 简单理解函数f(x;θ)中分号的含义
- 嵌入式tomcat的不使用web.xml原理分析
- 正片工艺、负片工艺,这两种PCB生产工艺的差异到底是什么?
- [CodeForces757E]Bash Plays with Functions
- 大数据HBase_04_01