链接

思路

  首先是dp,如果直接用每个种颜色的剩余个数做状态的话,复杂度为5^15。

  由于c<=5,所以用剩余数量的颜色的种类数做状态:f[a][b][c][d][e][last]表示剩余数量为1的颜色种类数,为2,3,4,5的。

  转移时,如果上一次使用的是为4的,这次如果转移使用3的话,为了使相邻的不相同,则需要-1

  最后一个转移写错了个地方,一直re...

代码

 #include<cstdio>
#include<algorithm>
#include<iostream> using namespace std;
typedef long long LL;
const LL mod = 1e9+;
const int N = ; LL f[N][N][N][N][N][];
int t[]; LL dfs(int a,int b,int c,int d,int e,int last) {
if ((a|b|c|d|e)==) return ;
if (f[a][b][c][d][e][last]) return f[a][b][c][d][e][last];
LL ans = ;
if (a) ans += dfs(a-,b,c,d,e,)*(a-(last==));
if (ans > mod) ans %= mod;
if (b) ans += dfs(a+,b-,c,d,e,)*(b-(last==));
if (ans > mod) ans %= mod;
if (c) ans += dfs(a,b+,c-,d,e,)*(c-(last==));
if (ans > mod) ans %= mod;
if (d) ans += dfs(a,b,c+,d-,e,)*(d-(last==));
if (ans > mod) ans %= mod;
if (e) ans += dfs(a,b,c,d+,e-,)*e; //-
if (ans > mod) ans %= mod;
f[a][b][c][d][e][last] = ans;
return ans;
} int main() {
int n;
cin >> n;
for (int a,i=; i<=n; ++i) {
cin >> a;
t[a] ++;
}
cout << dfs(t[],t[],t[],t[],t[],);
return ;
}

最新文章

  1. oracle增量备份
  2. android JSON解析之JSONObject与GSON
  3. ArcGIS三大文件格式解析
  4. iostat命令简单说说
  5. Weibo SSO认证 和初次请求数据
  6. ASP.net与SQLite数据库通过js和ashx交互(连接和操作)
  7. OpenVPN-ng,为移动续航的应用层隧道
  8. WPF动态加载3D&nbsp;放大-旋转-平移
  9. 《反project核心原则》说明
  10. MongoDB基本语法
  11. 将n个东西分成n1,n2,n3,n4,....nr 共 r组分给r个人有多少种分法。
  12. spark组件笔记
  13. mysql 之各种 join 之间的关系
  14. spring cloud服务发现注解之@EnableDiscoveryClient与@EnableEurekaClient
  15. postman接口测试实例
  16. 圆桌的项目Alpha冲刺——测试
  17. 洛谷.3835.[模板]可持久化平衡树(fhq treap)
  18. 设置eclipse/myeclipse的智能提示
  19. launch edge 和 latch edge 延迟
  20. windows server 2003中用系统自带工具调整磁盘分区大小

热门文章

  1. SharePoint 2010 VS.net 2010 断点调试
  2. vi使用命令
  3. I2C总线协议学习笔记 (转载)
  4. Spring Security 之Session管理配置
  5. (转载)git常用命令
  6. MySql客户端远程连接MySql服务器
  7. 图的m着色
  8. .NET向WebService传值为decimal、double、int、DateTime等非string类型属性时,服务器端接收不到数据的问题
  9. springMVC-数据绑定
  10. jdbc学习笔记01