Bzoj 1079 着色方案 题解
1079: [SCOI2008]着色方案
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 2237 Solved: 1361
[Submit][Status][Discuss]
Description
有n个木块排成一行,从左到右依次编号为1~n。你有k种颜色的油漆,其中第i种颜色的油漆足够涂ci个木块。
所有油漆刚好足够涂满所有木块,即c1+c2+...+ck=n。相邻两个木块涂相同色显得很难看,所以你希望统计任意两
个相邻木块颜色不同的着色方案。
Input
第一行为一个正整数k,第二行包含k个整数c1, c2, ... , ck。
Output
输出一个整数,即方案总数模1,000,000,007的结果。
Sample Input
1 2 3
Sample Output
HINT
100%的数据满足:1 <= k <= 15, 1 <= ci <= 5
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
#include <cmath>
#include <map>
using namespace std;
int n,t,a[],js[];
long long f[][][][][][],p=;
bool vi[][][][][][];
long long dfs(int a,int b,int c,int d,int e,int la)
{
if(a==&&b==&&c==&&d==&&e==)return ;
if(vi[a][b][c][d][e][la])return f[a][b][c][d][e][la];
vi[a][b][c][d][e][la]=;
if(a)f[a][b][c][d][e][la]+=a*dfs(a-,b+,c,d,e,),f[a][b][c][d][e][la]%=p;
if(b)
{
if(b!=)f[a][b][c][d][e][la]+=(b-(la==))*dfs(a,b-,c+,d,e,);
else if(la!=)f[a][b][c][d][e][la]+=dfs(a,b-,c+,d,e,);
f[a][b][c][d][e][la]%=p;
}
if(c)
{
//cout<<a<<' '<<b<<' '<<c<<' '<<d<<' '<<e<<endl;
if(c!=)f[a][b][c][d][e][la]+=(c-(la==))*dfs(a,b,c-,d+,e,);
else if(la!=) f[a][b][c][d][e][la]+=dfs(a,b,c-,d+,e,);
f[a][b][c][d][e][la]%=p;
}
if(d)
{
if(d!=)f[a][b][c][d][e][la]+=(d-(la==))*dfs(a,b,c,d-,e+,);
else if(la!=)f[a][b][c][d][e][la]+=dfs(a,b,c,d-,e+,);
f[a][b][c][d][e][la]%=p;
}
if(e)
{
if(e!=)f[a][b][c][d][e][la]+=(e-(la==))*dfs(a,b,c,d,e-,);
else if(la!=)f[a][b][c][d][e][la]+=dfs(a,b,c,d,e-,);
f[a][b][c][d][e][la]%=p;
}
return f[a][b][c][d][e][la];
}
int main()
{
scanf("%d",&t);
for(int i=;i<=t;i++)
{
scanf("%d",&a[i]);
n+=a[i];
js[a[i]]++;
}
long long ans=dfs(js[],js[],js[],js[],js[],);
printf("%lld\n",ans);
return ;
}
顺便提一句,我之所以还要多开一个vi数组,是为了防止f模p之后为0的情况。
Bzoj 1079 着色方案 题解的更多相关文章
- [BZOJ]1079 着色方案(SCOI2008)
相邻色块不同的着色方案,似乎这道题已经见过3个版本了. Description 有n个木块排成一行,从左到右依次编号为1~n.你有k种颜色的油漆,其中第i种颜色的油漆足够涂ci个木块.所有油漆刚好足够 ...
- bzoj 1079 着色方案
题目: 有n个木块排成一行,从左到右依次编号为1~n.你有k种颜色的油漆,其 中第i 种颜色的油漆足够涂ci 个木块.所有油漆刚好足够涂满所有木块,即c1+c2+-+ck=n.相邻两个木块涂相同色显得 ...
- BZOJ 1079 着色方案(DP)
如果把当前格子涂什么颜色当做转移的话,状态则是每个格子的颜色数还剩多少,以及上一步用了什么颜色,这样的状态量显然是5^15.不可取. 如果把当前格子涂颜色数还剩几个的颜色作为转移的话,状态则是每个格子 ...
- BZOJ 1079: [SCOI2008]着色方案 记忆化搜索
1079: [SCOI2008]着色方案 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...
- BZOJ 1079: [SCOI2008]着色方案(巧妙的dp)
BZOJ 1079: [SCOI2008]着色方案(巧妙的dp) 题意:有\(n\)个木块排成一行,从左到右依次编号为\(1\)~\(n\).你有\(k\)种颜色的油漆,其中第\(i\)种颜色的油漆足 ...
- [BZOJ 1079][SCOI 2008]着色方案
1079: [SCOI2008]着色方案 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2237 Solved: 1361[Submit][Stat ...
- bzoj 1079: [SCOI2008]着色方案 DP
1079: [SCOI2008]着色方案 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 803 Solved: 512[Submit][Status ...
- 【BZOJ】1079: [SCOI2008]着色方案(dp+特殊的技巧)
http://www.lydsy.com/JudgeOnline/problem.php?id=1079 只能想到5^15的做法...........................果然我太弱. 其实 ...
- 【BZOJ 1079】[SCOI2008]着色方案
Description 有n个木块排成一行,从左到右依次编号为1~n.你有k种颜色的油漆,其中第i种颜色的油漆足够涂ci个木块.所有油漆刚好足够涂满所有木块,即c1+c2+...+ck=n.相邻两个木 ...
随机推荐
- 基于EF6的快速开发Web框架——Swift.Net
Swift.Net This Is A Light-Weight And Fast-Develop .Net Framework. Usage STEP 1 Create Your Entities ...
- UWP应用使用SQLite库的方法
1.打开菜单“工具”-“扩展和更新”,选择“联机”选项,然后搜索“SQLite”,在搜索结果中找到“SQLite for Universal Windows Platform”,然后点击下载进行安装. ...
- Android零基础入门第29节:善用TableLayout表格布局,事半功倍
原文:Android零基础入门第29节:善用TableLayout表格布局,事半功倍 前面学习了线性布局和相对布局,线性布局虽然方便,但如果遇到控件需要排列整齐的情况就很难达到要求,用相对布局又比较麻 ...
- 进程交互还可以使用QSharedMemory
官方例子: http://doc.qt.io/qt-5/qtcore-ipc-sharedmemory-example.html 查了一下,QSharedMemory没有自带任何信号.我的想法: 1. ...
- c# 查询本机可用的代理ip
现在有很多网站都提供免费的代理ip,但是你会发现很多网站显示的可以用的 ,在自己电脑上是用不了,写个小代码提取出自己电脑上可以用的代理,没什么技术含量,只是为了记录一下 string strUrl = ...
- cStor云存储、cProc云处理、cVideo云视频、cTrans云传输,云创个人网盘
http://www.cstor.cn,微信公众号:cstor_cn. 云创大数据是国际上云计算产品线齐全的企业之一,针对爆炸式增长的大数据需求,研发了自主知识产权的cStor云存储.cPr ...
- 关于 win32 下磁盘的遍历方法
最近要写个在线专杀的东东,虽然是专杀(本来只要清除几个特定的文件和杀几个特定的进程,然后把用户的注册表恢复正常,很多病毒木马最喜欢干的一件事情就是写 映像劫持 然后机器一重启,安全相关的软件全部玩完了 ...
- ansible(二)
一.软件相关模块 1.yum(下载包) 正常操作 yum 与rpm的区别 yum可以解决依赖关系rpm 全称readhat package manager(红帽包管理工具),需要自己解决依赖 yum源 ...
- java集合框架collection(5)HashMap和TreeMap
上图转载自:http://www.cnblogs.com/vamei/archive/2013/04/15/3000913.html 一.区别和联系 1.迭代器 迭代器是一种设计模式,它是一个对象,它 ...
- 代码审计之seacms v6.45 前台Getshell 复现分析
1.环境: php5.5.38+apache+seacms v6.45 seacms目录结构: │─admin //后台管理目录 │ │─coplugins //已停用目录 │ │─ebak //帝国 ...