1079: [SCOI2008]着色方案(记忆化搜索)

2024-04-16 02:58

本文主要是介绍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

Source

话说BZOJ的很多题都是看上去清晰明了,写起来玄妙无比~~
思路:
这个题的记忆化搜索状态表示是按照这种颜色的能涂次数来算的,如果不算相邻不能相同的情况还是很好理解的。

相邻相同情况:如果上一次的的次数为2,当前涂的是次数为1的,那么要减去上一次传下来的2。因为每种颜色只要只可能存在于一个维度,所以就保证了不会有相邻重复颜色的情况。

#include <cstdio>
#include <cstring>
#include <algorithm>using namespace std;typedef long long ll;const ll MOD = 1e9 + 7;
ll c[10],vis[16][16][16][16][16][6],dp[16][16][16][16][16][6];ll dfs(ll a,ll b,ll c,ll d,ll e,ll n)
{if(vis[a][b][c][d][e][n])return dp[a][b][c][d][e][n];if(a + b + c + d + e == 0) return dp[a][b][c][d][e][n] = 1;ll ans = 0;if(a)ans += (a - (n == 2)) * dfs(a - 1,b,c,d,e,1);if(b)ans += (b - (n == 3)) * dfs(a + 1,b - 1,c,d,e,2);if(c)ans += (c - (n == 4)) * dfs(a,b + 1,c - 1,d,e,3);if(d)ans += (d - (n == 5)) * dfs(a,b,c + 1,d - 1,e,4);if(e)ans += e * dfs(a,b,c,d + 1,e - 1,5);vis[a][b][c][d][e][n] = 1;return dp[a][b][c][d][e][n] = ans % MOD;
}int main()
{int n;scanf("%d",&n);for(int i = 1;i <= n;i++){int t;scanf("%d",&t);c[t]++;}printf("%lld\n",dfs(c[1],c[2],c[3],c[4],c[5],0) % MOD);return 0;
}

这篇关于1079: [SCOI2008]着色方案(记忆化搜索)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/907637

相关文章

Redis 多规则限流和防重复提交方案实现小结

《Redis多规则限流和防重复提交方案实现小结》本文主要介绍了Redis多规则限流和防重复提交方案实现小结,包括使用String结构和Zset结构来记录用户IP的访问次数,具有一定的参考价值,感兴趣... 目录一:使用 String 结构记录固定时间段内某用户 IP 访问某接口的次数二:使用 Zset 进行

解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)

《解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)》该文章介绍了使用Redis的阻塞队列和Stream流的消息队列来优化秒杀系统的方案,通过将秒杀流程拆分为两条流水线,使用Redi... 目录Redis秒杀优化方案(阻塞队列+Stream流的消息队列)什么是消息队列?消费者组的工作方式每

MySQL分表自动化创建的实现方案

《MySQL分表自动化创建的实现方案》在数据库应用场景中,随着数据量的不断增长,单表存储数据可能会面临性能瓶颈,例如查询、插入、更新等操作的效率会逐渐降低,分表是一种有效的优化策略,它将数据分散存储在... 目录一、项目目的二、实现过程(一)mysql 事件调度器结合存储过程方式1. 开启事件调度器2. 创

Java解析JSON的六种方案

《Java解析JSON的六种方案》这篇文章介绍了6种JSON解析方案,包括Jackson、Gson、FastJSON、JsonPath、、手动解析,分别阐述了它们的功能特点、代码示例、高级功能、优缺点... 目录前言1. 使用 Jackson:业界标配功能特点代码示例高级功能优缺点2. 使用 Gson:轻量

Redis KEYS查询大批量数据替代方案

《RedisKEYS查询大批量数据替代方案》在使用Redis时,KEYS命令虽然简单直接,但其全表扫描的特性在处理大规模数据时会导致性能问题,甚至可能阻塞Redis服务,本文将介绍SCAN命令、有序... 目录前言KEYS命令问题背景替代方案1.使用 SCAN 命令2. 使用有序集合(Sorted Set)

MyBatis延迟加载的处理方案

《MyBatis延迟加载的处理方案》MyBatis支持延迟加载(LazyLoading),允许在需要数据时才从数据库加载,而不是在查询结果第一次返回时就立即加载所有数据,延迟加载的核心思想是,将关联对... 目录MyBATis如何处理延迟加载?延迟加载的原理1. 开启延迟加载2. 延迟加载的配置2.1 使用

Android WebView的加载超时处理方案

《AndroidWebView的加载超时处理方案》在Android开发中,WebView是一个常用的组件,用于在应用中嵌入网页,然而,当网络状况不佳或页面加载过慢时,用户可能会遇到加载超时的问题,本... 目录引言一、WebView加载超时的原因二、加载超时处理方案1. 使用Handler和Timer进行超

C# ComboBox下拉框实现搜索方式

《C#ComboBox下拉框实现搜索方式》文章介绍了如何在加载窗口时实现一个功能,并在ComboBox下拉框中添加键盘事件以实现搜索功能,由于数据不方便公开,作者表示理解并希望得到大家的指教... 目录C# ComboBox下拉框实现搜索步骤一步骤二步骤三总结C# ComboBox下拉框实现搜索步骤一这

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。