1079: [SCOI2008]着色方案

题目:传送门

题解:

   DP刚神多年前讲过的一道神题。

   二话不说,上来就是一个六维数组:F[i][a][b][c][d][e]//表示上一次涂的颜色是还剩下i次可用的,a~e表示不同次数的颜色种数。

   次数一样的颜色其实是相同的

   那么我们记忆化搜索一下就OK(表示很久没打过了...)

代码(巨丑勿喷):

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<cstdlib>
 4 #include<cmath>
 5 #include<algorithm>
 6 using namespace std;
 7 const int mod=1000000007;
 8 typedef long long LL;
 9 LL f[6][16][16][16][16][16];//f[i][a][b][c][d][e]表示上一次涂的颜色是还剩下i次可用的,a~e表示不同次数的颜色种数
10 int a[6];
11 int k;
12 LL DP(int last,int a1,int a2,int a3,int a4,int a5)
13 {
14     if(a1<0 || a2<0 || a3<0 || a4<0 || a5<0)return 0;
15     if(a1==0 && a2==0 && a3==0 && a4==0 && a5==0)return 1;
16     if(f[last][a1][a2][a3][a4][a5]!=0) return f[last][a1][a2][a3][a4][a5];
17
18     LL sum=0;
19     sum=( sum + ( ( a1 - ( ( last==2 ) ? 1 : 0 ) ) * DP ( 1,a1-1,a2,a3,a4,a5 ) ) ) % mod;
20     sum=( sum + ( ( a2 - ( ( last==3 ) ? 1 : 0 ) ) * DP ( 2,a1+1,a2-1,a3,a4,a5) )) % mod;
21     sum=( sum + ( ( a3 - ( ( last==4 ) ? 1 : 0 ) ) * DP ( 3,a1,a2+1,a3-1,a4,a5) )) % mod;
22     sum=( sum + ( ( a4 - ( ( last==5 ) ? 1 : 0 ) ) * DP ( 4,a1,a2,a3+1,a4-1,a5) )) % mod;
23     sum=( sum + a5*DP(5,a1,a2,a3,a4+1,a5-1))%mod;
24     f[last][a1][a2][a3][a4][a5]=sum;
25     return sum;
26 }
27 int main()
28 {
29     memset(f,0,sizeof(f));
30     scanf("%d",&k);
31     for(int i=1;i<=k;i++)
32     {
33         int x;
34         scanf("%d",&x);
35         a[x]++;
36     }
37     printf("%lld\n",DP(0,a[1],a[2],a[3],a[4],a[5]));
38     return 0;
39 }

转载于:https://www.cnblogs.com/CHerish_OI/p/8443733.html

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

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

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

  2. bzoj1079: [SCOI2008]着色方案

    1079: [SCOI2008]着色方案 Time Limit: 10 Sec  Memory Limit: 162 MB Description 有n个木块排成一行,从左到右依次编号为1~n.你有k ...

  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. [SCOI2008]着色方案(DP)

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

  6. bzoj 1079 [SCOI2008]着色方案

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

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

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

  8. [SCOI2008]着色方案

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

  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.0版设置说明
  2. python视频网站项目_Python开发教育网站项目实例教学(105集视频课程含源码)
  3. Action profile: ZAVADDR和ZAVPERS
  4. java axis2 教程_webservice的Axis2入门教程java版
  5. 认知空间是什么意思_Number是“数”,one是“一”,那么number one什么意思?
  6. vue个人博客项目部署上线
  7. 操作系统复习笔记(五)
  8. 使用VS开发基于Oracle程序的严重问题
  9. 病历管理系统设计与实现
  10. linux recv函数 参数,linux send recv函数详解
  11. part-17 从开环增益曲线谈到运放稳定性
  12. 梦之光芒黑客小游戏攻略
  13. 名帖136 刘春霖 楷书《楷书帖选》
  14. 西北工业大学计算机学院推免,2021年西北工业大学接收推荐免试研究生预报名的通知...
  15. 大话世界格局:春秋五霸与战国七雄
  16. 最全面的Java核心技术开发手册
  17. 农民工工地受伤是否就可以申请工伤?
  18. 纯Javascript的输入框掩码
  19. virtual audio cable
  20. ETL开发流程小记(1)

热门文章

  1. mfc---手动给toolbar按钮添加消息View中
  2. 接口访问次数_系统运行缓慢,CPU 100%,Full GC次数过多,这一招帮你全搞定
  3. 终端软件升级功能开发_5个很棒的终端技巧可帮助您升级为开发人员
  4. 数据结构的简要介绍:图形如何工作
  5. JavaScript 实现鼠标移动时实时获取其相对盒子的偏移
  6. HashMap和HashSet原理及底层实现
  7. flutter离线源码安装包最新版本下载地址
  8. 阿里云双12服务器和阿里云双12数据库活动又开始了
  9. 「深度」线下大数据正成为构建精准“用户画像”的最大助力
  10. ls和find命令查找的一些小技巧