1079

思路:

  dp;

  我们如果dp方程为15维,每维记录颜色还有多少种;

  不仅tle,mle,它还re;

  所以,我们压缩一下dp方程;

  方程有6维,第i维记录有多少种颜色还剩下i次;

  最后还要记录上次使用是第几维;

来,上代码:

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <iostream>
  4. #include <algorithm>
  5.  
  6. using namespace std;
  7.  
  8. #define ll long long
  9. #define mod 1000000007
  10.  
  11. ll n,m[],sum,ai[],dp[][][][][][];
  12.  
  13. bool if_[][][][][][];
  14.  
  15. ll dfs(ll a,ll b,ll c,ll d,ll e,ll f)
  16. {
  17. if(a<||b<||c<||d<||e<) return ;
  18. if(a+b+c+d+e>sum) return ;
  19. if(a>m[]||b>m[]||c>m[]||d>m[]||e>m[]) return ;
  20. if(if_[a][b][c][d][e][f]) return dp[a][b][c][d][e][f];
  21. if_[a][b][c][d][e][f]=true;
  22. ll now=;
  23. if(f==)
  24. {
  25. now+=dfs(a,b,c,d,e+,)*(e+);
  26. now+=dfs(a,b,c,d,e+,)*(e+);
  27. now+=dfs(a,b,c,d,e+,)*e;
  28. now+=dfs(a,b,c,d,e+,)*(e+);
  29. now+=dfs(a,b,c,d,e+,)*(e+);
  30. now+=dfs(a,b,c,d,e+,)*(e+);
  31. }
  32. else if(f==)
  33. {
  34. now+=dfs(a,b,c,d+,e-,)*(d+);
  35. now+=dfs(a,b,c,d+,e-,)*(d+);
  36. now+=dfs(a,b,c,d+,e-,)*(d+);
  37. now+=dfs(a,b,c,d+,e-,)*d;
  38. now+=dfs(a,b,c,d+,e-,)*(d+);
  39. now+=dfs(a,b,c,d+,e-,)*(d+);
  40. }
  41. else if(f==)
  42. {
  43. now+=dfs(a,b,c+,d-,e,)*(c+);
  44. now+=dfs(a,b,c+,d-,e,)*(c+);
  45. now+=dfs(a,b,c+,d-,e,)*(c+);
  46. now+=dfs(a,b,c+,d-,e,)*(c+);
  47. now+=dfs(a,b,c+,d-,e,)*c;
  48. now+=dfs(a,b,c+,d-,e,)*(c+);
  49. }
  50. else if(f==)
  51. {
  52. now+=dfs(a,b+,c-,d,e,)*(b+);
  53. now+=dfs(a,b+,c-,d,e,)*(b+);
  54. now+=dfs(a,b+,c-,d,e,)*(b+);
  55. now+=dfs(a,b+,c-,d,e,)*(b+);
  56. now+=dfs(a,b+,c-,d,e,)*(b+);
  57. now+=dfs(a,b+,c-,d,e,)*b;
  58. }
  59. else if(f==)
  60. {
  61. now+=dfs(a+,b-,c,d,e,)*(a+);
  62. now+=dfs(a+,b-,c,d,e,)*(a+);
  63. now+=dfs(a+,b-,c,d,e,)*(a+);
  64. now+=dfs(a+,b-,c,d,e,)*(a+);
  65. now+=dfs(a+,b-,c,d,e,)*(a+);
  66. now+=dfs(a+,b-,c,d,e,)*(a+);
  67. }
  68. now%=mod;
  69. dp[a][b][c][d][e][f]=now;
  70. // printf("%d %d %d %d %d %d %lld\n",a,b,c,d,e,f,now);
  71. return now;
  72. }
  73.  
  74. int main()
  75. {
  76. // freopen("color.in","r",stdin);
  77. // freopen("color.out","w",stdout);
  78. cin>>n;ll pos;
  79. for(ll i=;i<=n;i++)
  80. {
  81. cin>>pos;
  82. ai[pos]++;
  83. }
  84. for(ll i=;i<=;i++)
  85. {
  86. for(ll j=i;j<=;j++) m[i]+=ai[j];
  87. sum+=ai[i];
  88. }
  89. dp[ai[]][ai[]][ai[]][ai[]][ai[]][]=;
  90. if_[ai[]][ai[]][ai[]][ai[]][ai[]][]=true;
  91. cout<<dfs(,,,,,);
  92. return ;
  93. }

AC日记——[SCOI2008] 着色方案 bzoj 1079的更多相关文章

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

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

  2. bzoj 1079: [SCOI2008]着色方案 DP

    1079: [SCOI2008]着色方案 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 803  Solved: 512[Submit][Status ...

  3. bzoj1079: [SCOI2008]着色方案

    ci<=5直接想到的就是5维dp了...dp方程YY起来很好玩...写成记忆化搜索比较容易 #include<cstdio> #include<cstring> #inc ...

  4. [SCOI2008]着色方案

    1079: [SCOI2008]着色方案 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2228  Solved: 1353[Submit][Stat ...

  5. [SCOI2008] 着色方案[高维dp]

    321. [SCOI2008] 着色方案 ★★★   输入文件:color.in   输出文件:color.out   简单对比时间限制:1 s   内存限制:64 MB 题目背景: 有n个木块排成一 ...

  6. BZOJ 1079: [SCOI2008]着色方案(巧妙的dp)

    BZOJ 1079: [SCOI2008]着色方案(巧妙的dp) 题意:有\(n\)个木块排成一行,从左到右依次编号为\(1\)~\(n\).你有\(k\)种颜色的油漆,其中第\(i\)种颜色的油漆足 ...

  7. 【BZOJ】1079: [SCOI2008]着色方案(dp+特殊的技巧)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1079 只能想到5^15的做法...........................果然我太弱. 其实 ...

  8. 【BZOJ 1079】[SCOI2008]着色方案

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

  9. [luogu2476][bzoj1079][SCOI2008]着色方案【动态规划】

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

随机推荐

  1. spring里面的context:component-scan

    原文:http://jinnianshilongnian.iteye.com/blog/1762632 component-scan的作用的自动扫描,把扫描到加了注解Java文件都注册成bean &l ...

  2. FIFO页面淘汰算法

    1.优异虚拟存储系统,若进程在内存中占3页(开始时内存为空),若采用先进先出(FIFO)页面淘汰算法,当执行以下访问页号序列后1,3,4,2,1,3,5,1,2,5,4,2,会产生多少次缺页(9) 在 ...

  3. HNOI2018 摸鱼记

    HNOI2018 摸鱼记 今天我又来记流水账啦 Day 0 颓废的一天. 我,球爷和杜教在颓膜膜.io ych看起来在搓碧蓝 鬼知道哥达鸭干了什么 学习氛围只局限在机房的一角 后来全体Oier开会,5 ...

  4. 关于 Inno Setup 报木马的问题处理

    用 Inno Setup 生成的安装包总是报木马,尝试了N次之后发现,把 Compression=lzma 改为 Compression=zip 就不会再报了,可能lzma的压缩算法导致delphi的 ...

  5. 使用Html5shiv.js让ie支持html5

    ie低版本不支持html5标签,可以引入一段脚本,在ie浏览器中创建html5的标签. 1,可以在网上下载html5shiv的压缩包,引入压缩版的html5shiv.min.js即可. 脚本引用要在h ...

  6. Python import与from import使用

    Python程序可以调用一组基本的函数(即内建函数),比如print().input()和len()等函数.Python本身也内置一组模块(即标准库).每个模块都是一个Python程序,且包含了一组相 ...

  7. SQL 与关系代数

    Table of Contents 前言 关系与表 关系代数的基本运算 投影 选择 并运算 集合差运算 笛卡尔积 更名运算 关系代数的附加运算 集合交运算 连接运算 自然连接 内连接 外连接 结语 前 ...

  8. PoolManager

    我用的PoolManager版本是5.5.2的,导入的包总共有三个文件夹:Editor,Plugins,PoolManagerExampleFiles 1.Editor这个文件夹里面的东西,顾名思义, ...

  9. ASP.NET Core 2.1 源码学习之 Options[3]:IOptionsMonitor 【转】

    原文链接:https://www.cnblogs.com/RainingNight/p/strongly-typed-options-ioptions-monitor-in-asp-net-core. ...

  10. Oz 创建Windows2008R2镜像

    此tdl和auto文件只可定义windows disk bus以ide模式启动,不支持virtio. <template> <name>Windows-gushiren< ...