算法习题-经典环形涂色问题

【算法设计与分析】回溯法(地图填色问题) 存储好数据后分别对三个数据集进行测试,数据集le450_5a和le450_15b在较长的时间内程序无响应,对其进行检查发现数据集le450_5a在区域103,184之间反复回溯,le450_15b在316,226之间反复回溯,如下所示,在WA中涂上红色,那么删除NT和SA可选颜色中的红色,在Q中涂上绿色,此时NT和SA中都只剩下蓝色可填,如果在NT中涂上蓝色,那么SA中无可选颜色。进行填色,因为度数越大的节点受到其他节点的约束就越大,先填涂其他节点容易导致度数大的节点无可填颜色,延长运行时间。 阅读详情

在对某个圆上色,具体步骤为:  
首先在纸上画下一个圆O_1,然后在圆O1内画一个圆O2,圆O2 内不上色。  
现在将圆O1内除圆O2的区域等分为n个部分,如图所示。对此n个部分使用m种颜色上色,使得相邻两个区域的颜色不同,问共有多少种不同方案,由于结果可能很大,对10^9+7取模后输出。 (对于两种不同的方案,只要有一个区域上色的颜色不同,我们即认为是不同的)

解题思路:

设 a_n 表示当有n个部分,m种颜色时的所有方案数。考虑当n=1时,a_1=0因为当只有一个部分时,没有相邻的部分,不满足条件,因此种类有 0 个。考虑当n=2时,a_2=m*(m-1)。当有n个部分时,可以分为两种情况:

       1、 第 1 个和第 n-1 个相同时:第 n 个有 m-1 种选法,前 n-1 个的选法总数等于a_{n-2},因为第 1 个和第 n-1 个相同,因此相当于第 n-2 个直接连接在了第  1 个上,因此种数就相当于a_{n-2}因此,该种情况的总数为:(m-1)*a_{n-2}
       2、 第 1 个和第 n-1 个不同时:第 n 个有 m-2 种选法,而第 1 个到第 n-1 个就相当于一个完整的环,因此,种数为: a_{n-1} 因此,该种情况的总数为:(m-2) * a_{n-1}

由以上两种情况即可推导出递推式为:a_{n}=(m-2)*a_{n-1}+(m-1)*a_{n-2}\left ( n \geqslant 3 \right )

进一步化简,利用特征方程,进行尝试求解

变换形式:原式 = a_n-(m-2)*a_{n-1}-(m-1)*a_{n-2}=0
由于是二阶线性方程,

设 a_n=r^n,那末 a_{n-1}=r^{n-1},a_{n-2}=r^{n-2}
故:r^n-(m-2)*r^{n-1}-(m-1)*r^{n-2}=0
解得:r_1=-1,r_2=m-1,a_n=A*r_1^n+B*r_2^n

带入:a_1=0,a_2=m*((m-1)
可得:a_n=(m-1)^n+(-1)^n*(m-1)

代码实现:

import java.util.*;
public class Main{
    static int p = (int)1e9 + 7;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        long n = sc.nextLong();
        long m = sc.nextLong();
        if(n == 2) System.out.println(m * (m-1) % p);
        else {
            long t1 = qmi(m-1,n);
            long t2 = (qmi(-1,n) * (m-1) + p) % p;
            System.out.println((t1 + t2) % p);
        }
    }

    static long qmi(long a,long k) {
        long res = 1;
        while(k != 0) {
            if((k & 1) == 1) res = res * a % p;
            a = a * a % p;
            k >>= 1;
        }
        return res;
    }
}

PyCharm高效配置Gitee全攻略 本文介绍了如何在PyCharm和VS Code中配置Gitee插件并管理代码。主要内容包括:1) PyCharm连接Gitee的配置步骤;2) 代码拉取与冲突解决方法;3) VS Code界面功能区域详解;4) 完整的代码提交流程(暂存→提交→推送)。特别说明了VS Code中Git面板的使用方法,以及推送代码到Gitee远程仓库的具体操作步骤。文章还提供了解决代码冲突的建议和注意事项,帮助开发者更好地进行版本控制。 阅读详情

相关推荐

Scratch离线版部署指南:解决资源缺失与页面显示异常问题

本文提供了一份详尽的Scratch离线版部署指南,旨在解决网络依赖导致的资源缺失与页面显示异常问题。通过从基础文件获取、自动化资源抓取到生产环境部署的完整流程,帮助教育工作者和开发者在无网络环境下搭建功能完整的本地Scratch编辑器,确保编程教学的顺利进行。

wine的专栏 1261

环形染色问题

本文讲述了环形染色问题,属于排列组合

Jaydenyu2012的博客 1万+

保姆级教程:用PyBullet在Windows/Mac上快速搭建你的第一个机器人仿真环境(附避坑指南)

本教程详细介绍了如何使用PyBullet在Windows和Mac上快速搭建机器人仿真环境,包括Python环境配置、依赖安装避坑指南、首个机械臂仿真实现及性能优化技巧。通过分步指导和实战代码,帮助初学者轻松入门机器人仿真技术。

weixin_42526087的博客 407

环形染色问题(CSP初赛数学)

环形染色问题详解,转自知乎

Arthurjiang27的博客 1万+

华为IPD实战:从概念到发布的完整流程拆解(附各阶段关键文档模板)

本文深入拆解华为IPD(集成产品开发)从概念到发布的完整实战流程,涵盖概念、计划、开发验证及发布生命周期四大阶段。详细解析了各阶段的核心活动、关键产出与决策评审点,并提供了如《初始业务计划书》等关键文档模板框架,旨在帮助企业将IPD理论转化为可执行的操作指南,提升研发效率与产品成功率。

weixin_29212429的博客 528

QDMA工程搭建/windows驱动编译与性能测试

请注意,根据您的目标操作系统,您可能需要在windows启动配置中启用测试签名的驱动程序,以便启用此驱动程序的安装。右键单击设备,选择更新驱动程序软件,然后选择构建的QDMA驱动程序的文件夹(通常为。创建一个新工程,在IP Catalog中搜索QDMA,双击创建qdma ip核。驱动程序安装安装驱动程序最简单的方法是通过Windows的“设备管理器”。如果系统提示未经验证的驱动程序发布者,请选择无论如何安装此驱动程序软件。本节主要介绍QDMA驱动在Windows系统的源文件、编译和安装过程。

qq_28455081的博客 2287

【专题】环形染色问题

环形染色问题详解

WillHou的博客 8588

nacos3.1.0适配国产数据库

Nacos 3.1.0适配国产数据库指南 本文介绍了Nacos 3.1.0版本适配达梦数据库和人大金仓数据库的具体步骤。主要内容包括:添加达梦和人大金仓的JDBC驱动依赖,修改nacos-persistence模块的配置文件及相关Java类,以及打包和运行注意事项。文章特别指出3.1.0版本需要JDK17环境,并提供了解决常见问题的建议,如添加VM options配置和不同启动方式等。通过本文的配置指导,可以实现Nacos服务在国产数据库环境下的正常运行。

梦昼初的博客 1465

关于环涂色问题的公式何其推导

环状涂色问题的公式及其推导。

愿赌服输 4万+

UE5.3像素流送Docker化部署:从Linux服务器搭建到云端实时渲染

本文详细介绍了在Linux服务器上使用Docker容器化部署UE5.3像素流送服务的完整流程。通过将虚幻引擎运行时、信令服务器和TURN服务打包为标准化镜像,利用Docker Compose进行编排,实现了云端实时渲染应用的快速部署、环境一致与弹性扩展,有效解决了传统部署中的环境依赖与运维难题。

k0l1m2n3o的博客 200

VSAN闪存缓存磁盘故障处理指南-RAID0模式实战解析

本文详细解析了VSAN集群中RAID0模式下的闪存缓存磁盘故障处理全流程。通过模拟真实故障场景,从告警识别、数据重建策略到磁盘组重构,提供了手把手的实战操作指南,并深入探讨了RAID0缓存故障的独特影响与风险,为运维人员应对此类高性能存储架构的突发问题提供了专业解决方案。

assembly8low的博客 444

蓝桥杯:环形涂色

如图,组成环形的格子需要涂3种颜色。 它们的编号分别是1~14 相邻的格子不能用相同的颜色。 涂色方案的数目是:16386 当格子数目为50的时候,求涂色方案总数。 public class RingColor { // 递归解法 /* static long f(int n) { if(n==2) return 6; if(n==3) return 6; return 2...

Buns.的博客 3622

HANA-公司间销售ICS-IDOC系统配置-保姆级配置文档

合作伙伴编号:这个客户表示收票方(销售公司在生产公司中所对应的客户代码,卖方开票,买方收票),也就是咱们在配置消息类型输出的时候合作伙伴的类型的一个具体的客户编码,这个是站在发货工厂的角度去看的,也就是EDI 输出的 BP 合作伙伴的编号;在项目实施过程中经常会遇到关联方交易的问题,有公司间采购的业务场景,也会存在公司间销售的业务场景,本文将着重讲解公司间销售在SAP系统中的实现场景。在这个过程中,销售公司向客户开票产生应收,而生产公司向销售公司开票产生自己的应收,同时销售公司向生产公司产生应付。

我小时候很黑的博客 2392

环形涂色问题

现在给定一个长度为n的环,和m种颜色的涂料,需要求解有多少种方法可以使得所有的相邻的格子的颜色不相邻。

2301_80662593的博客 309

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

蓝桥杯训练 环形涂色 题解

Code: //环形涂色 #include <iostream> #include <fstream> using namespace std; const int N = 51; int a[N]; int last; int first; int main(){ long long f[N] = {0}; f[1] = 3; f[2] =...

不行不至 1573

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

环形格子涂色

如图,组成环形的格子需要涂3种颜色。它们的编号分别是1~14相邻的格子不能用相同的颜色。涂色方案的数目是:16386当格子数目为50的时候,求涂色方案总数。思路: 可以将这个环从1和14之间剪开14....       21分两种情况:当2和14颜色相同时,1这个位置有2种填法当2和14颜色不相同时,1这个位置有 1种填法  #include<stdio.h> int main() ...

Lawrence_121 1776

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

环形涂色(未完)

如上图,组成环形的格子需要涂3种颜色。它们的编号分别是1~14相邻的格子不能用相同的颜色。涂色方案的数目是:24576当格子数目为n的时候,求涂色方案总数。我不知道怎么解决最后一个格子和第一个格子颜色冲突的问题,但算n=14时确实答案正确,好奇怪。解:public class Main { public static void main(String[] args) { Scanner i...

AIlfw的博客 1834

墙壁涂色问题--动态规划

问题描述 给一个环形的墙壁涂颜色,颜色一共有 k 种,墙壁被竖直地划分成 n 个部分,相邻的部分颜色不能相同。请你写程序计算出一共有多少种给墙壁上色的方案? 例如,当 n=5,k=3​ 时,下面是一种合法的涂色方案 而由于墙壁是环形的,所以下面就是一种非法的方案 输入 输入两个数字 n,k(1≤n≤103,2≤k≤10),分别代表墙壁数量和颜色种类。 输出 对于每个询问,输出一行整数,合法的墙壁涂色方案数。 样例输入1 5 3 样例输出1 30 数据规模与约定 时间限制:5 s 内存限制:256 M

果果冻冻的博客 1699

扇形涂色问题

题目描述 将一个圆形等分成N个小扇形,将这些扇形标记为1,2,3,…,N。现在使用M种颜色对每个扇形进行涂色,每个扇形涂一种颜色,且相邻的扇形颜色不同。 求:有多少种涂色方法。 分析 设a(n)为符合要求的第n个扇形的涂色方法。 对扇形1有m种涂色方法,扇形2有m-1种涂色方法,扇形3也有m-1种涂色方法,扇形n也有m-1种涂色方法。于是,共有m×(m−1)^(n−1)种不同的涂色方法,...

maozezhong0的博客 4895

递推:墙壁涂色问题

墙壁涂色问题:在一面环形墙上分成了n块,现在共有3种颜料,要给这个墙涂色,要求相邻不能是同一个颜色,问有多少种方案。这是个组合数学又是个递推公式:考虑共有 n块,1.如果此时第n-1块如果和第1块相同,此时第n块就有2种方案,并且第n-2块必然此时和第n-1块不同,这就是f(n-2)的方案数,此时为2*f(n-2)。1.如果此时第n-1块和第1块不同,那么不就是f(n-1)的方案数么,此时为f(n...

肘子的博客 1877

计蒜客习题:墙壁涂色

问题描述 蒜头君觉得白色的墙面好单调,他决定给房间的墙面涂上颜色。他买了 3 种颜料分别是红、黄、蓝,然后把房间的墙壁竖直地划分成 n 个部分,蒜头希望每个相邻的部分颜色不能相同。他想知道一共有多少种给房间上色的方案。 例如,当 n=5 时,下面就是一种合法方案。 |蓝|红|黄|红|黄| 由于墙壁是一个环形,所以下面这个方案就是不合法的。 |蓝|红|黄|红|黄|蓝| 输入格式 ...

LiuKairui的博客 1146

polya定理,环形涂色

环形涂色裸题 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<vector> 5 #include<cstring> 6 #include<map> 7 #include<s...

weixin_33739646的博客 247

墙壁涂色

题目大意 蒜头君觉得白色的墙面好单调,他决定给房间的墙面涂上颜色。他买了 33 种颜料分别是红、黄、蓝,然后把房间的墙壁竖直地划分成 nn 个部分,蒜头希望每个相邻的部分颜色不能相同。他想知道一共有多少种给房间上色的方案。 例如,当 n=5n=5 时,下面就是一种合法方案。 由于墙壁是一个环形,所以下面这个方案就是不合法的。 输入格式 一个整数 nn,表示房间被划分成多少部分。(1≤n≤...

我自关山点酒,千秋皆入喉 528

【动态规划DP】墙壁涂色

题目描述 Description 蒜头君觉得白色的墙面好单调,他决定给房间的墙面涂上颜色。他买了 3 种颜料分别是红、黄、蓝,然后把房间的墙壁竖直地划分成 nn 个部分,蒜头希望每个相邻的部分颜色不能相同。他想知道一共有多少种给房间上色的方案。例如,当 n=5 时,下面就是一种合法方案。 蓝|红|黄|红|黄 由于墙壁是一个环形,所以下面这个方案就是不合法的。 蓝|红|黄|红|蓝 Input 一个整数 n,表示房间被划分成多少部分。(1≤n≤50) Output 一个整数,表示给墙壁涂色的合法方案数。 设

m0_52427832的博客 435

搜索习题。

第一题:任何一个大于 11 的自然数 nn,总可以拆分成若干个小于 nn 的自然数之和。现在给你一个自然数 nn,要求你求出 nn 的拆分成一些数字的和。每个拆分后的序列中的数字从小到大排序。然后你需要输出这些序列,其中字典序小的序列需要优先输出。

2401_86719683的博客 1737

习题:墙壁涂色

题目: 蒜头君觉得白色的墙面好单调,他决定给房间的墙面涂上颜色。他买了3 种颜料分别是红、黄、蓝,然后把房间的墙壁竖直地划分成 n 个部分,蒜头希望每个相邻的部分颜色不能相同。他想知道一共有多少种给房间上色的方案。 例如,当 n=5时,下面就是一种合法方案。 由于墙壁是一个环形,所以下面这个方案就是不合法的。 输入格式: 一个整数n,表示房间被划分成多少部分。(1≤n≤50) 输出格式: 一个...

2019/2/9 498
上一篇: 面试专栏-02-MySQL知识点(第二部分)
下一篇: 算法习题-力扣446周赛题解
o独酌o
博客等级 码龄3年 324粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值