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

news/2024/7/7 21:31:32

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


http://lihuaxi.xjx100.cn/news/257921.html

相关文章

Datawhale厦门大学分享记录!

Datawhale线下 作者&#xff1a;李明夷&#xff0c;厦门大学 WISER CLUB2021 年 5 月 16 日下午&#xff0c;Datawhale 团队受邀来到厦门大学&#xff0c;同 WISER CLUB 在经济楼 N402 共同举办学习、竞赛及工作经验分享会&#xff0c;吸引了校内各学院的同学参加。本次活动由 …

Zookeeper源码分析:Follower角色初始化

参考资料 <<从PAXOS到ZOOKEEPER分布式一致性原理与实践>> zookeeper-3.0.0Follower角色初始化 本文主要简述一下Follower角色初始化的流程&#xff0c;并概述一下主要的操作。 Follower角色初始化流程 case FOLLOWING:try {LOG.info("FOLLOWING");se…

ECCV22 最新54篇论文分方向整理|包含Transformer、图像处理、人脸等(附下载)...

点击上方“视学算法”&#xff0c;选择加"星标"或“置顶”重磅干货&#xff0c;第一时间送达本文首发极市平台公众号&#xff0c;转载请获得授权并标明出处。导读 最近一周&#xff0c;ECCV2022陆续放出了更多和GAN&#xff0c;Transformers相关的论文&#xff0c;为…

使用深度学习阅读和分类扫描文档

作者|小白来源|小白学视觉收集数据首先&#xff0c;我们要做的第一件事是创建一个简单的数据集&#xff0c;这样我们就可以测试我们工作流程的每一部分。理想情况下&#xff0c;我们的数据集将包含各种易读性和时间段的扫描文档&#xff0c;以及每个文档所属的高级主题。我找不…

Matlab与线性代数 -- 寻找矩阵的非零元素

本微信图文详细介绍了Matlab中find函数的用法。

oracle中的sql%rowcount,sql%found、sql%notfound、sql%rowcount和sql%isopen

Oracle 存储过程 删除表记录时删除不存在的记录也是显示删除成功 create or replace procedure delDept(p_deptno in dept.deptno%type) is begindelete from dept where deptnop_deptno;dbms_output.put_line(部门删除成功...);exception when others thendbms_output.put_lin…

AJAX范例大搜罗(转载)

1&#xff0e;每天一个AJAX 该网站提供了很多非常酷的AJAX例子&#xff0c;号称是每天更新一个。 网址&#xff1a;http://www.ajaxcompilation.com/ 2&#xff0e;210个AJAX框架 一个不错的提供Ajax范例的网站&#xff0c;Ajax框架已更新至210个。 网址&#xff1a;http:…

为什么贝叶斯统计如此重要?

↑↑↑关注后"星标"Datawhale每日干货 & 每月组队学习&#xff0c;不错过Datawhale干货 译者&#xff1a;张峰&#xff0c;Datawhale成员即使对于一个非数据科学家来说&#xff0c;贝叶斯统计这个术语也已经很流行了。你可能在大学期间把它作为必修课之一来学习&…