博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[usaco6.1.1Postal Vans]
阅读量:4965 次
发布时间:2019-06-12

本文共 1849 字,大约阅读时间需要 6 分钟。

来自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
#include
#include
#include
#define MN 2200#define mod 1000000000using 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<
<
<
>(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<

 

转载于:https://www.cnblogs.com/FallDream/p/usacoPostalVans.html

你可能感兴趣的文章
动态方法决议 和 消息转发
查看>>
js 基础拓展
查看>>
C#生成随机数
查看>>
Android应用程序与SurfaceFlinger服务的连接过程分析
查看>>
Java回顾之多线程
查看>>
机电行业如何进行信息化建设
查看>>
9、总线
查看>>
Git 笔记 - section 1
查看>>
2018 Multi-University Training Contest 10 - Count
查看>>
HDU6203 ping ping ping
查看>>
《人人都是产品经理》书籍目录
查看>>
如何在git bash中运行mysql
查看>>
OO第三阶段总结
查看>>
构建之法阅读笔记02
查看>>
DataTable和 DataRow的 区别与联系
查看>>
检索COM 类工厂中CLSID 为 {00024500-0000-0000-C000-000000000046}的组件时失败
查看>>
mysql数据库中数据类型
查看>>
Fireworks基本使用
查看>>
Linux 标准 I/O 库
查看>>
.net Tuple特性
查看>>