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

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

项目编号:bzoj-1079

项目等级:Safe

项目描述:

  

特殊收容措施:

  DP。普通的状压状态数515,显然TLE+MLE,我们考虑把底数和幂换一换,压成155的状态数。

  故状态设计为:f[last][rest1][rest2][rest3][rest4][rest5],表示上一个颜色为last,剩余k个方块的颜色种类数为restk的涂色方案数。

  然后DP或记忆化即可。复杂度o(5k5)。

附录:

1 #include 
2 #define range(i,c,o) for(register int i=(c);i<(o);++i) 3 #define dange(i,c,o) for(register int i=(c);i>(o);--i) 4 using namespace std; 5 6 static const int AwD=1000000007; static int n; 7 int r[5],f[5][20][20][20][20][20]; 8 9 int DP(const int&las)10 {11 if(!r[0]&&!r[1]&&!r[2]&&!r[3]&&!r[4]) return 1;12 if(~f[las][r[0]][r[1]][r[2]][r[3]][r[4]])13 {14 return f[las][r[0]][r[1]][r[2]][r[3]][r[4]];15 }16 int ret=0;17 range(col,0,5) if(r[col])18 {19 --r[col]; if(col) ++r[col-1];20 if(int cnt=r[col]+(col+1!=las))21 {22 (ret+=1ll*DP(col)*cnt%AwD)%=AwD;23 }24 ++r[col]; if(col) --r[col-1];25 }26 return f[las][r[0]][r[1]][r[2]][r[3]][r[4]]=ret;27 }28 29 int main()30 {31 scanf("%d",&n),memset(f,-1,sizeof f);32 range(i,0,n) {
int c; scanf("%d",&c),++r[c-1];}33 return printf("%d\n",DP(0)),0;34 }
View Code

 

转载于:https://www.cnblogs.com/spactim/p/6715601.html

你可能感兴趣的文章
js中 $ 未定义 或者 “xxx”未定义
查看>>
Sublime3插件安装
查看>>
[转]大型网站系统架构的演化
查看>>
非常好的JSUI
查看>>
基于EasyNVR摄像机无插件直播流媒体服务器实现类似于单点登录功能的免登录直播功能...
查看>>
python学习0day
查看>>
课堂练习之检测水军
查看>>
函数指针的使用
查看>>
位图数据结构的操作
查看>>
azkaban用户管理及权限配置
查看>>
GCD学习笔记
查看>>
PHP......会话控制SESSION与COOKIE
查看>>
[转]AchartEngineActivity引擎绘制柱状图、曲线图
查看>>
[转]javascript实现限制上传文件的大小
查看>>
我的Java设计模式-策略模式
查看>>
C# 报表接口样例,简单实用
查看>>
C++常见内存错误及解决方案
查看>>
控制台应用程序窗口无法输入汉字解决办法
查看>>
Java中实现String.padLeft和String.padRight
查看>>
winCVS 使用的一个小要点
查看>>