hdu1693Eat the Trees(插头dp)
传送门
先坑着,等啥时候会了再来填坑
不得不说思路真的是很妙啊
1 //minamoto 2 #include<iostream> 3 #include<cstdio> 4 #include<cstring> 5 #define ll long long 6 using namespace std; 7 #define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++) 8 char buf[1<<21],*p1=buf,*p2=buf; 9 inline int read(){ 10 #define num ch-'0' 11 char ch;bool flag=0;int res; 12 while(!isdigit(ch=getc())) 13 (ch=='-')&&(flag=true); 14 for(res=num;isdigit(ch=getc());res=res*10+num); 15 (flag)&&(res=-res); 16 #undef num 17 return res; 18 } 19 const int N=20; 20 int n,m,bin[N],mp[N][N]; 21 ll f[N][N][(1<<12)+5]; 22 void solve(int x,int y){ 23 int plug1=bin[y-1],plug2=bin[y]; 24 if(mp[x][y]){ 25 for(int j=0;j<bin[m+1];++j){ 26 f[x][y][j]+=f[x][y-1][j^plug1^plug2]; 27 if(((j>>(y-1))&1)==((j>>y)&1)) continue; 28 f[x][y][j]+=f[x][y-1][j]; 29 } 30 } 31 else{ 32 for(int j=0;j<bin[m+1];++j){ 33 if(!(j&plug1)&&!(j&plug2)) f[x][y][j]=f[x][y-1][j]; 34 else f[x][y][j]=0; 35 } 36 } 37 } 38 int main(){ 39 // freopen("testdata.in","r",stdin); 40 int T=read(); 41 bin[0]=1;for(int i=1;i<=15;++i) bin[i]=bin[i-1]<<1; 42 for(int t=1;t<=T;++t){ 43 n=read(),m=read(); 44 for(int i=1;i<=n;++i) 45 for(int j=1;j<=m;++j) 46 mp[i][j]=read(); 47 memset(f,0,sizeof(f)); 48 f[1][0][0]=1; 49 for(int i=1;i<=n;++i){ 50 for(int j=1;j<=m;++j) solve(i,j); 51 if(i!=n) for(int j=0;j<bin[m];++j) 52 f[i+1][0][j<<1]=f[i][m][j]; 53 } 54 printf("Case %d: There are %lld ways to eat the trees.\n",t,f[n][m][0]); 55 } 56 return 0; 57 }
转载于:https://www.cnblogs.com/bztMinamoto/p/9656274.html
hdu1693Eat the Trees(插头dp)相关推荐
- HDU1693 Eat The Trees(插头dp)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1693 Eat the Trees Time Limit: 4000/2000 MS (Java/Othe ...
- HDU1693 Eat the Trees —— 插头DP
题目链接:https://vjudge.net/problem/HDU-1693 Eat the Trees Time Limit: 4000/2000 MS (Java/Others) Mem ...
- hdu 1693 Eat the Trees 插头dp
每一个点可向上下左右四个方向连边,这就是插头. 每一条轮廓线切开的是当前已确定的点的未确定的点,其经过的插头有m个竖着的,一个横着的,懒得画图了.. 每一次转移就是将左边的变到下面,上面的变到左边,每 ...
- [入门向选讲] 插头DP:从零概念到入门 (例题:HDU1693 COGS1283 BZOJ2310 BZOJ2331)
转载请注明原文地址:http://www.cnblogs.com/LadyLex/p/7326874.html 最近搞了一下插头DP的基础知识--这真的是一种很锻炼人的题型-- 每一道题的状态都不一样 ...
- URAL1519 Formula 1 —— 插头DP
题目链接:https://vjudge.net/problem/URAL-1519 1519. Formula 1 Time limit: 1.0 second Memory limit: 64 MB ...
- 插头DP题目泛做(为了对应WYD的课件)
题目1:BZOJ 1814 URAL 1519 Formula 1 题目大意:给定一个N*M的棋盘,上面有障碍格子.求一个经过所有非障碍格子形成的回路的数量. 插头DP入门题.记录连通分量. 1 #i ...
- bzoj1814 Ural 1519 Formula 1(插头dp模板题)
1814: Ural 1519 Formula 1 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 924 Solved: 351 [Submit][S ...
- HDU4084 插头dp
题意:给定一个图,0是不能放的,然后现在有1X1和1X2方块,最后铺满该图,使得1X1使用次数在C到D之间,1X2次数随便,问有几种放法 思路:插头DP或轮廓线,多加一维DP讨论就可以 注意插头DP状 ...
- POJ3133(插头dp)
传送门:http://poj.org/problem?id=3133 Manhattan Wiring Time Limit: 5000MS Memory Limit: 65536K ...
- P3272 [SCOI2011]地板(插头DP)
[题面链接] https://www.luogu.org/problemnew/show/P3272 [题目描述] 有一个矩阵,有些点必须放,有些点不能放,用一些L型的图形放满,求方案数 [题解] ( ...
最新文章
- 单位斜变函数matlab,实验二 用MATLAB实现线性系统的时域分析
- centos6.4 搭建knowlededgeroot-1.0.4知识库平台
- CodeForces - 1400G Mercenaries(容斥原理)
- Redis缓存击穿和缓存雪崩、缓存穿透以及对应的解决方案
- 两种参数类型_深入理解Java中方法的参数传递机制
- Python模拟Linux的Crontab, 写个任务计划需求
- CoreAnimation —— CAReplicatorLayer(拷贝图层)
- 2019春第一课程设计报告
- linux android开发环境搭建
- html中url路径是什么意思,url是什么意思?
- 详解linux运维工程师入门级必备技能
- php管理员权限表,权限表的建立
- Server Develop (四) select实现非阻塞sever
- 移动警务通GIS应用系统建设方案
- Django中的swagger文档
- 一分钟给大量视频褪色并加马赛克
- 什么是小规模纳税人、小型微利企业、小微企业
- React项目中提示caniuse-lite已过时,建议更新
- js 正则校验 长数字 电话号码 银行卡号
- uvm_objection/uvm_objection_events/test_done_objection/callbacks_objection/objection_callback
热门文章
- 车道检测--VPGNet: Vanishing Point Guided Network for Lane and Road Marking Detection and Recognition
- 重温目标检测--Fast R-CNN
- python同名包_可以使用两个同名的Python包吗?
- mysql的proxy机制_MySQL Proxy工作机制浅析
- SpringBoot-400-Bad-Request(Request-header-is-too-large)
- linux启动时间极限优化,Linux启动时间的极限优化
- java.lang.NullPointerException空指针问题
- iOS自动化测试之Appium的安装和使用
- 图像的均值和方差python_python-绘制均值和标准差
- python怎么重启内核_解决jupyter运行pyqt代码内核重启的问题