博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu5803
阅读量:7045 次
发布时间:2019-06-28

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

数位dp

f[i][st][w1][w2]表示到第i位,这一位a,b,c,d的数是否分别要小于ABCD的状态st,w1表示前一位a+c-b-d为几,w2表示a+d-b-c为几

由于前一位差大于等于2后,后面能始终确保a+c>b+d,所以w1, w2状态只有-1,0,1,2四种

注意这时如果按十进制诸位考虑,复杂度为18*9^4*16*4*4会超时

而逐二进制位复杂度为61*2^4*16*4*4,如此可过

1 #include
2 3 using namespace std; 4 typedef long long ll; 5 const int mo=1e9+7; 6 int f[62][16][4][4],g[4][62]; 7 ll a,b,c,d; 8 9 int dfs(int i,int st,int w1,int w2)10 {11 if (i==-1)12 {13 if (w1>=2&&w2>=1) return 1;14 else return 0;15 }16 if (f[i][st][w1][w2]>-1) return f[i][st][w1][w2];17 int s=0,r[4];18 for (int j=0; j<4; j++) r[j]=((st>>j)&1)?1:g[j][i];19 for (int a0=0; a0<=r[0]; a0++)20 for (int b0=0; b0<=r[1]; b0++)21 for (int c0=0; c0<=r[2]; c0++)22 for (int d0=0; d0<=r[3]; d0++)23 {24 int nw=st,q1,q2;25 int l=a0+c0+(w1-1)*2-b0-d0;26 if (l<-1) continue; else q1=(l>1)?2:l;27 l=a0+d0+(w2-1)*2-b0-c0;28 if (l<-1) continue; else q2=(l>1)?2:l;29 if (a0
View Code

 

转载于:https://www.cnblogs.com/phile/p/6399461.html

你可能感兴趣的文章
爬取所有校园新闻
查看>>
wireshark里无网络接口解决办法
查看>>
你不知道的javascript--上卷--读书笔记2
查看>>
handsontable 给单元格自定义属性
查看>>
jQuery 基础事件
查看>>
ActiveMQ安装与部署
查看>>
博客不玩了
查看>>
Java广度优先爬虫示例(抓取复旦新闻信息)
查看>>
Java的递归算法
查看>>
Android多点触摸放大缩小图片
查看>>
android Uri获取真实路径转换成File的方法
查看>>
Populating Next Right Pointers in Each Node II leetcode java
查看>>
Error format not a string literal and no format arguments解决方案
查看>>
T-SQL函数类别统计
查看>>
centos6.5 升级python2.66 to 2.78
查看>>
unity3d结合轮廓显示,实现完整的框选目标(附Demo代码)
查看>>
netstat
查看>>
Office 365 - SharePoint 2013 Online之添加App开发工具Napa
查看>>
升级R语言
查看>>
Android 百度地图 SDK v3.0.0 (四) 引入离线地图功能
查看>>