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

2024-08-30 20:32

本文主要是介绍1079: [SCOI2008]着色方案(dp之记忆化搜索),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接
题意:略
解答:考虑到每种颜色最多只能涂5个,设dp[a][b][c][d][e][last]:能涂一个格子的颜色有a种,能涂2个格子的颜色有b种,能涂3个格子的颜色有c种,能够涂4个格子的颜色有d种,能够涂5个格子的颜色有e种,且上一次涂的是last,的方案数。
能够想到的是,比如一种颜色x能涂3个格子,当我们使用它涂一个格子后,那么它就会变为能涂2个格子的类别中去了。这一点决定了转移的判断。


#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define pb push_back
#define X first
#define Y second
#define cl(a,b) memset(a,b,sizeof(a))
typedef pair<int,int> P;
const int maxn=1005;
const int inf=1<<27;
#define mod 1000000007LL dp[17][17][17][17][17][7];
bool vis[17][17][17][17][17][7];
int x[7];
LL dfs(int a,int b,int c,int d,int e,int last){if(vis[a][b][c][d][e][last])return dp[a][b][c][d][e][last];if(a+b+c+d+e==0)return 1;LL ans=0;if(a)ans+=(a-(last==2))*dfs(a-1,b  ,c,d,e,1)%mod;//解释,last==2last表示上一次使用了,能涂2个格子的颜色,假设为x,那么上一次用x涂了一个格子后,x颜色就还能在涂一个格子了,也就是x算到能涂一个格子的颜色里了,所以,要去掉,也就是a-(last==2)if(b)ans+=(b-(last==3))*dfs(a+1,b-1,c,d,e,2)%mod;if(c)ans+=(c-(last==4))*dfs(a,b+1,c-1,d,e,3)%mod;if(d)ans+=(d-(last==5))*dfs(a,b,c+1,d-1,e,4)%mod;if(e)ans+=(e-(last==6))*dfs(a,b,c,d+1,e-1,5)%mod;vis[a][b][c][d][e][last]=true;return dp[a][b][c][d][e][last]=ans%mod;
}
int main(){int n;scanf("%d",&n);for(int i=0;i<n;i++){int t;scanf("%d",&t);x[t]++;}printf("%lld\n",dfs(x[1],x[2],x[3],x[4],x[5],0));return 0;
}

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



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

相关文章

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思想压缩)。

hdu1240、hdu1253(三维搜索题)

1、从后往前输入,(x,y,z); 2、从下往上输入,(y , z, x); 3、从左往右输入,(z,x,y); hdu1240代码如下: #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#inc

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

hdu4826(三维DP)

这是一个百度之星的资格赛第四题 题目链接:http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1004&cid=500 题意:从左上角的点到右上角的点,每个点只能走一遍,走的方向有三个:向上,向下,向右,求最大值。 咋一看像搜索题,先暴搜,TLE,然后剪枝,还是TLE.然后我就改方法,用DP来做,这题和普通dp相比,多个个向上