来自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]相关推荐

  1. 9型人格人口占比数据_数据人格

    9型人格人口占比数据 Big Tech companies make money by mining your data. They refine this data using machine le ...

  2. 怎么保证自动化脚本没有问题_质量保证将使设计变得自动化

    怎么保证自动化脚本没有问题 As changes in the world pick up speed, machine learning pioneers steer new technologic ...

  3. 那个时候我不小心建立了一个间谍应用

    In the fall of 2007, my parents gave me an unforgettable gift for my sixteenth birthday: a first-gen ...

  4. bit1618c 功能简介_c 9中的新功能简介

    bit1618c 功能简介 With the upcoming release of .NET 5 - the release which unifies the .NET runtimes - Mi ...

  5. Florian%C3%B3polis巴西北岸新业务的最佳场所四方数据分析

    Introduction 介绍 The Background 的背景 Brazil is known for Rio de Janeiro or São Paulo. But one of the m ...

  6. 智能对话需求_我们是否已经超过了智能手机的需求?

    智能对话需求 重点 (Top highlight) This past spring, the notion of personal time was reintroduced to the Unit ...

  7. usaco Postal Vans(dp)

    是哈密顿回路,然后...就不知道怎么写了 ,以前写过类似的不过情况没这么多也没这么复 usaco training 6.1.1 Postal Vans 题解 标签: usaco training题解d ...

  8. 是vans_你知道VANS有哪些好鞋不贵系列?

    Vans好看.经典还经常打折啊!本vans鞋狗强烈推荐90块2双的vans的汽水系列,还有35元的vans小白鞋.72元的棋盘格! 今年vans的折扣力度真的相当猛!随意放张10月份的折扣图你们感受一 ...

  9. [外文理解] DDD创始人Eric Vans:要实现DDD原始意图,必须CQRS+Event Sourcing架构。

    原文:http://www.infoq.com/interviews/Technology-Influences-DDD# 要实现DDD(domain drive  design 领域驱动设计)原始意 ...

最新文章

  1. 恭贺《构建高可用Linux服务器》荣获几项殊荣
  2. eclipse安装weblogic Server服务器
  3. maven学习6 Eclipse下Tomcat常用设置
  4. java和python哪个编程好找工作_学编程选Python还是Java?就业发展哪个好??
  5. [deviceone开发]-do_SlideListView的简单示例
  6. JeeSite 企业信息化快速开发平台
  7. 利用Python进行数据分析--数据聚合与分组运算
  8. mysql8从入门到精通电子书_MySQL 8从入门到精通(视频教学版)
  9. 分享76网络科技88教育教学47公司企业PPT模板
  10. 高中计算机技术基础教学ppt,高中信息技术教学课件
  11. 【4G通讯模组相关】 TCPIP连接本地电脑测试 、内网穿透
  12. 对封装的ajax的应用-查询商铺
  13. 用文氏图表示映射满射单射及函数的关系
  14. 精品电子书分享 – 《JavaScript Enlightenment.PDF》
  15. JavaScript实现五种排序算法
  16. 跳转到三方App ,三方App 是如何返回自己的App的
  17. css如何选择同一个class下的第一个div?
  18. js打印三角形超详解
  19. SAP中物料报废无法确定账户问题处理实例
  20. 解决工作流:org.activiti.engine.ActivitiException: Unknown property used in expression: ${AAAAA}报错

热门文章

  1. 新能源汽车,车架号VIN码查询接口
  2. pc端不同分辨率适配
  3. 魅族便签,是否能成为国内便签应用的No.1?
  4. 今日头条阅读量怎么刷_今日头条推广 今日头条阅读量怎么刷
  5. Air202掉坑日记(2)——连接阿里云成功后自动掉线(AT版本)
  6. 简单理解函数f(x;θ)中分号的含义
  7. 嵌入式tomcat的不使用web.xml原理分析
  8. 正片工艺、负片工艺,这两种PCB生产工艺的差异到底是什么?
  9. [CodeForces757E]Bash Plays with Functions
  10. 大数据HBase_04_01