(每日一练28815)题目名称:括号上色

文盲老顾
新星创作者: 信息安全技术领域
领域专家: 数据库技术领域
2023-06-16 14:21:48

小艺酱又得到了一堆括号。 括号是严格匹配的。 现在给括号进行上色。 上色有三个要求: 1、只有三种上色方案,不上色,上红色,上蓝色。 2、每对括号只有一个上色。 3、相邻的两个括号不能上相同的颜色,但是可以都不上色。 问括号上色有多少种方案?答案对1000000007取模。

老顾自己是没什么思路的,看了看别人的题解,大体上说这个是一个 CodeForces 的原题,嗯,所以 C 站的描述错误,每对括号只能且必须有一个上色。

这里推荐几个小伙伴的题解,要么 dfs,要么 dp,反正老顾不懂,以下题解老顾验证过了,可以 AC。

问哥的题解:https://blog.csdn.net/soonway2010/article/details/128165678

H_ang的题解:https://blog.csdn.net/qq_21433411/article/details/94434739

然后,老顾又一次特立独行,和小伙伴们的办法都不一致,根据这几个小伙伴的答案,反推了一种系数计算方式

老顾的思路也很简单 () 一定是4种组合 ((())) 每嵌套一层,组合数乘3,得到36,对于 ()()() 来说,有一个乘法系数,目前代码里也有相关计算,计算出系数,然后相乘,就可以得到结果

最后的混合嵌套:(()()) 这种嵌套方式的系数,是根据内部包含的分组()()()数量来确定的,只有一组,那就是3,反正,根据数量得出新的系数

import re
s = input()
v = [[8,7,20],[7,6,17]]
def fs(m):
    return str(int(m.group(1)) * 3) + ' '
def add(n):
    if n < len(v):
        return
    for i in range(len(v),n):
        if i % 2 == 0:
            v.append([8 * v[-1][1],8 * v[-1][1] - v[-1][0]])
            v[-1].append(3 * v[-1][1] - v[i - 2][1])
        else:
            v.append([v[-1][1],v[-1][1] - v[i - 2][1]])
            v[-1].append(v[-2][2] - v[i - 2][2])
def x(m):
    f = 1
    row = list(map(int,m.group(2).split()))
    add(len(row))
    for i,val in enumerate(row):
        f *= val
        if i > 0:
            f //= v[i - 1][0]
            f *= v[i - 1][1]
    if m.group(1) == '(':
        f //= v[i - 1][1]
        f *= v[i - 1][2]
    return str(f) + ' '
ss = re.sub(r'(\(\))','4 ',s)
while not re.search(r'^\d+\s*$',ss):
    while re.search(r'\([\d]+ \)',ss):
        ss =re.sub(r'\(([\d]+ )\)',fs,ss)
    ss = re.sub(r'(^|\()([\d\s]+)($|\))',x,ss)
print(int(ss) % 1000000007)
...全文
811 回复 打赏 收藏 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
源码直接下载地址: https://pan.quark.cn/s/854bd57df23a 在金融行业中,房产购置贷款是众多人在购置不动产时必须进行的一项财务规划。Matlab作为一种功能强大的数学及数据分析平台,经常被应用于各类复杂的运算,其中包括住房贷款的计算。本文将详细研究运用Matlab开发住房贷款计算程序的相关知识要点,以协助读者掌握如何借助编程技术处理实际的信贷问题。 1. **信贷种类** - **商业信贷**:此类贷款通常由金融机构提供,其利率会随市场行情变化,借款人可选用固定利率或浮动利率方案。 - **公积金信贷**:该类贷款获得政府机构的支持,利率一般低于商业信贷,但设有最高贷款金额的限制。 2. **偿付模式** - **等额本金偿付**:每月支付相同数量的本金,利息部分逐月减少,因此整体还款总额会逐步降低。 - **等额本息偿付**:每月支付固定金额的本金与利息组合,利息部分随本金的逐月减少而递减。 3. **住房贷款计算公式** - **等额本息偿付**:每月还款额=贷款本金×[月利率×(1+月利率)^(贷款期数)]÷[(1+月利率)^(贷款期数)-1]。 - **等额本金偿付**:每月应还本金=贷款总额/贷款期数,每月利息=(贷款余额-累计已还本金)×月利率。 4. **Matlab编程基础** - **变量设定**:在Matlab环境中,首要任务是设定贷款数额、年化利率、贷款时长等核心参数。 - **循环控制结构**:借助for循环来模拟每个还款周期的过程,进行本金与利息的计算。 - **函数构建**:将住房贷款的计算逻辑封装为函数,便于重复使用和测试不同条件下的结果。 5. **Matlab代码编写** - **等额本息函数实现**...

320

社区成员

发帖
与我相关
我的任务
社区描述
主要用于技术交流,包括但不限于 .net,mssql,js,css,python,算法,运维。也可以晒最新技术,美图,运动等。最后,如果有问题,可以提问,老顾能帮忙的会尽量帮忙哦。
前端sqlserverasp.net 技术论坛(原bbs) 北京·西城区
社区管理员
  • 文盲老顾
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧