1079: [SCOI2008]着色方案

Time Limit: 10 Sec  Memory Limit: 162 MB

Description

  有n个木块排成一行,从左到右依次编号为1~n。你有k种颜色的油漆,其中第i种颜色的油漆足够涂ci个木块。
所有油漆刚好足够涂满所有木块,即c1+c2+...+ck=n。相邻两个木块涂相同色显得很难看,所以你希望统计任意两
个相邻木块颜色不同的着色方案。

Input

  第一行为一个正整数k,第二行包含k个整数c1, c2, ... , ck。

Output

  输出一个整数,即方案总数模1,000,000,007的结果。

Sample Input

3
1 2 3

Sample Output

10

HINT

100%的数据满足:1 <= k <= 15, 1 <= ci <= 5

Source

所以用F[a][b][c][d][e][l]表示当前有能涂1次的油漆a个,能涂2次的b个….前一个颜色为l,再搞下转移就行了。

 1 #include<iostream>
 2 #include<cstdio>
 3 #define ll long long
 4 #define mod 1000000007
 5 using namespace std;
 6 ll f[16][16][16][16][16][6];int x[6],n;
 7 bool mark[16][16][16][16][16][6];
 8 ll dp(int a,int b,int c,int d,int e,int k)
 9 {
10     ll t=0;
11     if(mark[a][b][c][d][e][k])return f[a][b][c][d][e][k];
12     if(a+b+c+d+e==0)return 1;
13     if(a)
14         t+=(a-(k==2))*dp(a-1,b,c,d,e,1);
15     if(b)
16         t+=(b-(k==3))*dp(a+1,b-1,c,d,e,2);
17     if(c)
18         t+=(c-(k==4))*dp(a,b+1,c-1,d,e,3);
19     if(d)
20         t+=(d-(k==5))*dp(a,b,c+1,d-1,e,4);
21     if(e)
22         t+=e*dp(a,b,c,d+1,e-1,5);
23     mark[a][b][c][d][e][k]=1;
24     return f[a][b][c][d][e][k]=(t%mod);
25 }
26 int main()
27 {
28     scanf("%d",&n);
29     for(int i=1;i<=n;i++)
30     {
31             int t;
32             scanf("%d",&t);
33             x[t]++;
34             }
35     printf("%lld",dp(x[1],x[2],x[3],x[4],x[5],0));
36     return 0;
37 }

转载于:https://www.cnblogs.com/WQHui/p/8575529.html

bzoj1079: [SCOI2008]着色方案相关推荐

  1. bzoj1079: [SCOI2008]着色方案(DP)

    1079: [SCOI2008]着色方案 题目:传送门 题解: DP刚神多年前讲过的一道神题. 二话不说,上来就是一个六维数组:F[i][a][b][c][d][e]//表示上一次涂的颜色是还剩下i次 ...

  2. [BZOJ1079][SCOI2008]着色方案 dp

    1079: [SCOI2008]着色方案 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2368  Solved: 1428 [Submit][St ...

  3. BZOJ1079 [SCOI2008]着色方案 记忆化搜索

    1079: [SCOI2008]着色方案 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2826  Solved: 1682 [Submit][St ...

  4. bzoj1079 [SCOI2008]着色方案

    Description 有n个木块排成一行,从左到右依次编号为1~n.你有k种颜色的油漆,其中第i种颜色的油漆足够涂ci个木块.所有油漆刚好足够涂满所有木块,即c1+c2+...+ck=n.相邻两个木 ...

  5. bzoj 1079 [SCOI2008]着色方案

    bzoj 1079 [SCOI2008]着色方案 Description 有n个木块排成一行,从左到右依次编号为1~n.你有k种颜色的油漆,其中第i种颜色的油漆足够涂ci个木块.所有油漆刚好足够涂满所 ...

  6. BZOJ 1079: [SCOI2008]着色方案 记忆化搜索

    1079: [SCOI2008]着色方案 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...

  7. [SCOI2008]着色方案

    这题也是看了别人题解也才会做的. 题解: 本题用的记忆优化搜索,题目说了给的颜色可以恰好图够所有木块. 题目给了能涂几块木块的颜色一共有几种.因为我们不可以连续图,所以我们把他分开来涂色. 用dp[a ...

  8. [SCOI2008]着色方案(DP)

    题目链接 思想 显然我们后面的决策是跟前一步相关的,因此我们可以考虑DP,可以用一个15维的数组来进行转移,但是这样显然回mle,所以我们考虑如何压缩状态,由于1<=Ci<=51 < ...

  9. bzoj 1079: [SCOI2008]着色方案

    思路:按个数分类dp 1 #include<bits/stdc++.h> 2 #define LL long long 3 #define fi first 4 #define se se ...

最新文章

  1. 数据库分库分表详细拆解
  2. 「2019冬令营提高组」全连
  3. JMF入门(Java Media Framework)
  4. 一篇文章带你快速入门JavaScript(实操代码)
  5. java爬虫技术的作用_Java网络爬虫怎么实现?
  6. Android 应用程序获得系统权限
  7. H5个人博客模板分享
  8. chrome open axure 自动跳转到axure插件
  9. LaTex编辑器编辑公式
  10. ipa逆向分析class-dump的安装和使用
  11. Python 的图形用户界面
  12. 停车场计费算法 php,时段计费算法,一般用于停车计费
  13. Pro InfoPath 2007
  14. ES2015 class
  15. 解决 Windows 商店 0x800704cf 网络问题
  16. 被巨头、快递、新贵分食的跨境电商
  17. Source Insight 许可证激活
  18. mysql中开启binlog
  19. Sitime SIT8009BI-82-33E-125.000000Y 125M晶振
  20. python类之间相互调用_python相互调用

热门文章

  1. 根据工作时间计算小组成员得分
  2. BLE通信过程中,一次连接间隔最多可以发多少包,BLE的最大通信速度为多少
  3. hdu 1026 Ignatius and the Princess I(优先队列+bfs+记录路径)
  4. 一个文件夹就是一个信息系统
  5. 【C#】获取网页内容及HTML解析器HtmlAgilityPack的使用
  6. javascript高性能编程笔记(个人自用)
  7. .NET平台PE结构分析之Metadata(一)
  8. rmmod: can't change directory to '3.4.39': No such file or directory 解决方法
  9. jq实现点事图片移动_新品速递 | 移动云图片文字识别类产品全新版本惊喜登场...
  10. c++代码表白_一行 Python 代码能实现什么丧心病狂的功能? | CSDN博文精选