bzoj1079: [SCOI2008]着色方案 题解

这篇博客介绍了如何解决SCOI2008竞赛中的一道着色问题,其中包含k种颜色的油漆,每种颜色足够涂ci个木块。题目要求计算所有相邻木块颜色不同的着色方案数。博主提出了一个记忆化DFS的解题策略,定义了DP状态并给出转移方程,以处理不同油漆数量的组合,最终得出方案总数模1,000,000,007的结果。" 112488613,10538980,"Python性能提升:Pypy, Nuitka, Pyston与Numba实战

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1079: [SCOI2008]着色方案
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

我们发现K最多只有5,于是就会想到这样一个DP:
定义F[L][a][b][c][d][e]表示上一次用的油漆在没有用的情况下可以刷L个墙,而此时还能刷1个墙的油漆数量有a个,能刷2个墙的油漆数量有b个……能刷5个墙的油漆数量有e个;
此时考虑转移方程:
如果能刷L-1个墙的油漆数量大于1(也就是说除了上一次用的油漆还有油漆可以用),那么就有转移方程(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值