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

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

50%的数据很好考虑,基本的dp了

关键到了100%,如果用每种颜色有ci种这种常规的写法,显然5^15会爆空间

考虑到反过来,ci<=5, 15^5是不会爆空间的

又想到,每一种颜色,如果数量相同的话,其实是等效的。

这样我们不难想到用f[a,b,c,d,e,last]表示剩余颜色数量(就是还能刷木块的数目)为1,2,3,4,5的颜色种数为a,b,c,d,e时,且上一个位置用了剩余颜色数量为last的颜色有多少种方案

然后是实现的问题,弱弱的我想了半天,因为剩余数量对应的颜色种数是可增可减的,

所以我觉得通常以循环实现好像有点困难(好像也是可以写的,但太弱了……)

后来发现网上写的都是记忆化搜索,然后发现记忆化搜索实现起来比较容易;

其实记忆化搜索的效率基本上就等同于dp了

方程略复杂但是还是很很好想的

1 const mo=1000000007; 2 var f:array[0..16,0..16,0..16,0..16,0..16,0..5] of int64; 3     sum:array[0..5] of longint; 4     i,n,m,x:longint; 5  6 function ma(a,b:longint):longint; 7   begin 8     if a=b then exit(1) else exit(0); 9   end;10 11 function search(a,b,c,d,e,last:longint):int64;12   var s:int64;13   begin14     if a+b+c+d+e=0 then   //颜色用完了15     begin16       f[a,b,c,d,e,last]:=1;17       exit(1);18     end;19     if f[a,b,c,d,e,last]>0 then exit(f[a,b,c,d,e,last]);  //记忆化20     s:=0;   //累加这个位置上是用颜色数量为几的方案21     if a>0 then s:=(s+(a-ma(last,2))*search(a-1,b,c,d,e,1) mod mo) mod mo;22     if b>0 then s:=(s+(b-ma(last,3))*search(a+1,b-1,c,d,e,2) mod mo) mod mo;23 //5个转移是同理的,我就挑第二个说一下吧,首先当前位置如果用数量为2的b种颜色,显然每种颜色涂都能带来相同的方案数24 //显然,用了一个剩余数量为2的颜色涂当前位置,到下一个位置,剩余数量为1的颜色种类数肯定多了一个,剩余数量为2的颜色种数肯定少了一个25 //但是我们要考虑到,假如上一个位置用的是剩余数量为3的颜色涂的话,到了当前位置,上一个涂的剩余颜色数量变为2了,显然这个颜色是不能再涂这个位置的,要减去多算的方案(是不是废话有点多……)26     if c>0 then s:=(s+(c-ma(last,4))*search(a,b+1,c-1,d,e,3) mod mo) mod mo;27     if d>0 then s:=(s+(d-ma(last,5))*search(a,b,c+1,d-1,e,4) mod mo) mod mo;28     if e>0 then s:=(s+e*search(a,b,c,d+1,e-1,5) mod mo) mod mo;29     f[a,b,c,d,e,last]:=s;  //记忆化30     exit(s);31   end;32 33 begin34   readln(m);35   for i:=1 to m do36   begin37     read(x);38     n:=n+x;39     inc(sum[x]);40   end;41   writeln(search(sum[1],sum[2],sum[3],sum[4],sum[5],0) mod mo);42 end.
View Code

 

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

你可能感兴趣的文章
tomcat 热部署 总是building workspace
查看>>
为世界带来更多平等的机会,蚂蚁金服举办ATEC人工智能
查看>>
张文中复出,物美首次披露新零售转型内幕
查看>>
三星再次回应“S8虹膜识别被秒破”,不过说辞略显苍白无力
查看>>
量子计算将成人工智能新高地
查看>>
如何用WebIDE打开并运行CRM Fiori应用
查看>>
宁夏一中学买了51套VIVE打造VR实训教室,全球首个VR大空间多人解决方案落地
查看>>
[译]Node v5.1.0 (Stable)发布
查看>>
asp.net2.0的几个标准控件使用的小技巧
查看>>
Consistent Hashing算法
查看>>
dd-wrt下载地址
查看>>
浅入分析和Linux内核相关的文件夹/proc和/sys .
查看>>
PO BO VO DTO POJO DAO概念及其作用
查看>>
Java操作Redis
查看>>
CRM WebClient UI里的文件是如何上传到Netweaver后台的
查看>>
Office 2007显示文件夹慢
查看>>
LNMP的403问题总结
查看>>
反向代理
查看>>
Samba服务器搭建案例
查看>>
大数据工具比较
查看>>