博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu1693 eat the trees
阅读量:4349 次
发布时间:2019-06-07

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

题解:

一道极水的插头$dp$。

根本不需要左右括号分开看,直接都当作括号。

什么三进制四进制,二进制就可做。

讨论比模板要少。

 

(luogu丧心出题人有hack点。。。)

 

代码:

#include
#include
#include
using namespace std;#define N 15#define ll long longint T,n,m,k,tx,ty;int a[N][N];ll ans,bas[N];struct Map{ int hed[100050],cnt[2]; struct EG { int nxt; ll to,w; }e[1<<11][2]; void ae(int f,ll t,ll w) { e[++cnt[k]][k].to = t; e[cnt[k]][k].nxt = hed[f]; e[cnt[k]][k].w = w; hed[f] = cnt[k]; } void push(ll u,ll w) { for(int j=hed[u%100000];j;j=e[j][k].nxt) if(e[j][k].to==u) { e[j][k].w+=w; return ; } ae(u%100000,u,w); } void clear() { memset(hed,0,sizeof(hed)); cnt[k] = 0; }}mp;void init(){ k^=1; mp.clear();}void fkctr(){ for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(a[i][j])return ; ans++;}int main(){ scanf("%d",&T); bas[0]=1; for(int i=1;i<=11;i++)bas[i]=bas[i-1]<<1; for(int cse=1;cse<=T;cse++) { k = 0;ans = 0; memset(a,0,sizeof(a)); scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { scanf("%d",&a[i][j]); if(a[i][j])tx=i,ty=j; } mp.clear(); mp.push(0,1); for(int i=1;i<=n;i++) { for(int j=1;j<=mp.cnt[k];j++)mp.e[j][k].to<<=1; for(int j=1;j<=m;j++) { init(); for(int o=1;o<=mp.cnt[!k];o++) { ll now = mp.e[o][!k].to,val = mp.e[o][!k].w; int lp = (now>>(j-1))&1,rp = (now>>j)&1; if(!a[i][j]) { if(!lp&&!rp) { ll tmp = now; mp.push(tmp,val); } }else { if(!lp&&!rp) { if(a[i+1][j]&&a[i][j+1]) { ll tmp = now+bas[j-1]+bas[j]; mp.push(tmp,val); } }else if(!lp&&rp) { if(a[i][j+1]) { ll tmp = now; mp.push(tmp,val); } if(a[i+1][j]) { ll tmp = now+bas[j-1]-bas[j]; mp.push(tmp,val); } }else if(lp&&!rp) { if(a[i][j+1]) { ll tmp = now-bas[j-1]+bas[j]; mp.push(tmp,val); } if(a[i+1][j]) { ll tmp = now; mp.push(tmp,val); } }else { ll tmp = now-bas[j-1]-bas[j]; mp.push(tmp,val); if(i==tx&&j==ty) ans+=val; } } } } } fkctr(); printf("%lld\n",ans); } return 0;}

 

转载于:https://www.cnblogs.com/LiGuanlin1124/p/10233478.html

你可能感兴趣的文章
VsVim - Shortcut Key (快捷键)
查看>>
HDU5447 Good Numbers
查看>>
08.CXF发布WebService(Java项目)
查看>>
java-集合框架
查看>>
RTMP
查看>>
求一个数的整数次方
查看>>
点云PCL中小细节
查看>>
铁路信号基础
查看>>
RobotFramework自动化2-自定义关键字
查看>>
CMU Bomblab 答案
查看>>
技术分析淘宝的超卖宝贝
查看>>
Azure云服务托管恶意软件
查看>>
My安卓知识6--关于把项目从androidstudio工程转成eclipse工程并导成jar包
查看>>
旧的起点(开园说明)
查看>>
生产订单“生产线别”带入生产入库单
查看>>
crontab导致磁盘空间满问题的解决
查看>>
自定义滚动条
查看>>
APP开发手记01(app与web的困惑)
查看>>
初识前端作业1
查看>>
ffmpeg格式转换命令
查看>>