Lineup the Dominoes(UCF Local Programming Contest 2016 I,状压 DP)

【RT-DETR涨点改进】独家创新改进篇 | AAAI2024 | RT-DETR引入CFBlock增强对长程依赖和全局语义信息的建模能力,有助于提升复杂场景下小目标、遮挡目标的检测精度 本文给大家介绍在RT-DETR中引入CFBlock模块,能够有效提升模型对长程依赖和全局语义信息的建模能力,在保持轻量化和高效推理的基础上增强特征表达力,特别有助于提升复杂场景下小目标、遮挡目标的检测精度,从而实现更优的精度与速度平衡。 阅读详情

一.题目链接:

Lineup the Dominoes

二.题目大意:

T 组样例

每组有一个整数 n (n <= 16),表示有 n 个双面多米诺骨牌,每个多米诺骨牌正面有数字 s,反面有数字 t.

n 个多米诺骨牌可以排成一行当且仅当相邻的多米诺骨牌的相邻面上的数字相同(可以对任意多个多米诺骨牌正反面翻转).

问这 n 个多米诺骨牌排成一行有多少种方式(只有两种排列的多米诺骨牌顺序不同时,才为不同的排列).

三.分析:

dp[i][j][k] 表示 n 个骨牌已用的状态为 i,最后一个骨牌是 j,且最后一个骨牌 不翻转(0) / 翻转(1).

设计完状态后很容易写出状态转移方程,不过需要注意方案只与顺序不同,与是否翻转无关.

在最后的答案统计中还有一个小坑点:

很自然想到只需要枚举最后一个骨牌 i

if s[i] == t[i]:    ans += dp[(1<<n) - 1][i][0]

else                ans += dp[(1<<n) - 1][i][0] + dp[(1<<n) - 1][i][1].

即我一开始认为如果最后一个骨牌正反面的数字不同,则一定对应着不同的排列.

其实这样漏掉了一种情况.

下面是我的思路历程(不是证明,写得极其不严谨!)

假设当前序列为 (a1,a2) (a2,a3) (a3,a4) ... (an-1,an) (an,an+1) ,a2 != a3, a3 != a4, ..., an-1 != an, an != an +1.

翻转最后一个骨牌后序列为 (a1,a2) (a2,a3) (a3,a4) ... (an-2,an-1) (an-1,an) (an+1,an)

假设两个序列均合法且相异,但这与 (an-1,an) (an+1,an) 相邻明显矛盾.

那为了满足合法我们只能翻转 (an-1,an),那么序列变为 (a1,a2) (a2,a3) (a3,a4) ... (an-2,an-1) (an,an-1) (an+1,an)

其中 (an-2,an-1) (an,an-1) 相邻又产生矛盾,由此我们这样递归翻转下去,得到的序列为

(a2,a1) (a3,a2) (a4,a3) ... (an-1,an-2) (an,an-1) (an+1,an)

由于我们假设了这个序列与原序列均合法且相异,不难得出:a1 = a3 = a5 = ...; a2 = a4 = a6 = ...;

即这 n 个多米诺骨牌两两相同.

可推得:在最后一个骨牌正反面数字不同的情况下,如果 n 个骨牌两两相同,则骨牌翻转后仍对应同一种序列,否则一定对应着不同的序列.

综上我们需要特判所有骨牌相同的情况,答案为 n!

 四.代码实现:

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

const int M = (int)1e5;
const int inf = 0x3f3f3f3f;
const ll mod = (ll)1e9 + 7;

int s[16][2];
ll fac[17];
ll dp[1<<16][16][2];

bool check(int n)
{
    for(int i = 1; i < n; ++i)  if(!(s[0][0] == s[i][0] && s[0][1] == s[i][1] || s[0][0] == s[i][1] && s[0][1] == s[i][0]))    return 0;
    return 1;
}

int main()
{
    fac[0] = 1; for(int i = 1; i <= 16; ++i)    fac[i] = fac[i - 1] * i % mod;
    int T; scanf("%d", &T);
    while(T--)
    {
        int n; scanf("%d", &n);
        for(int i = 0; i < n; ++i)  scanf("%d %d", &s[i][0], &s[i][1]);
        if(check(n))                {printf("%lld\n", fac[n]); continue;}
        memset(dp, 0, sizeof(dp));
        for(int i = 0; i < n; ++i)  dp[1<<i][i][0] = dp[1<<i][i][1] = 1;
        for(int i = 3; i < (1<<n); ++i)
        {
            for(int j = 0; j < n; ++j)
            {
                if(!(i & (1<<j)))   continue;
                int state = (i ^ (1<<j));
                for(int k = 0; k < n; ++k)
                {
                    if(!(state & (1<<k)))   continue;
                    if(s[k][0] == s[j][0])      dp[i][j][0] = (dp[i][j][0] + dp[state][k][1]) % mod;
                    else if(s[k][1] == s[j][0]) dp[i][j][0] = (dp[i][j][0] + dp[state][k][0]) % mod;
                    if(s[k][0] == s[j][1])      dp[i][j][1] = (dp[i][j][1] + dp[state][k][1]) % mod;
                    else if(s[k][1] == s[j][1]) dp[i][j][1] = (dp[i][j][1] + dp[state][k][0]) % mod;
                }
            }
        }
        ll cnt = 0;
        for(int i = 0; i < n; ++i)  {cnt = (cnt + dp[(1<<n) - 1][i][0]) % mod; if(s[i][0] != s[i][1])   cnt = (cnt + dp[(1<<n) - 1][i][1]) % mod;}
        printf("%lld\n", cnt);
    }
    return 0;
}

 

组态王的日历时间控件脚本 日期时间控件中的脚本中在小于10的月份和天数前必须要加上0,这是由首字符对比机制规定的,首字母相同,就不再不做对比了,比如1和11,是一样的。首字母不同,再比较下一位。 float Ayear1; float Amonth1; float Aday1; string temp1; Ayear1=sd.Year; Amonth1=sd.Month; Aday1=sd.Day; temp1=StrFromInt( Ayear1, 10 ); if(Amonth1<10) temp1=temp1+"-0"+ 阅读详情

相关推荐

倍福TwinCAT3 OPC UA配置全流程:从安装到无密码访问(附常见问题解决)

本文提供了倍福TwinCAT3 OPC UA配置的完整实战指南,重点讲解如何实现无密码游客访问。从软件安装、授权配置、服务器初始化到深度排错,详细解析了配置流程中的关键步骤与常见陷阱,帮助工程师高效打通PLC与上位系统的数据通讯通道。

vulkan6gpu的博客 473

多米诺骨牌(欧拉通路,欧拉通路Test)

题目描述:     给定n张骨牌,每张骨牌有左右两个点数(从1到6)。问能不能通过交换骨牌的顺序和交换左右2个点数,使得任意两个相邻骨牌的相邻段为相等的数字。 输入描述:     输入文件中有多个测试数据。每个测试数据的第一行为一个整数N,1≤N≤100,表示多米诺骨牌的总数;接下来N行对每一张牌进行描述:每一行表示一张牌的左右两段的数字(1到6),用空格隔开。 输入文件最后一行为0,

Abner 3404

实战案例:用多智能体系统模拟房地产市场的架构设计

房地产市场是典型的复杂自适应系统:买方纠结“要不要上车”、卖方盘算“挂多少钱能快速成交”、中介忙着“撮合两边赚佣金”、政府琢磨“怎么调政策稳房价”——每一个参与者的微小决策,最终都会汇聚成“房价暴涨”“成交冰点”这样的宏观现象。传统的计量经济学模型(比如线性回归)假设“所有人都是理性人”,但现实中没人能算清所有变量——你可能因为“同事买了学区房”就跟风,也可能因为“怕失业”而放弃买房。这时候,多智能体系统(MAS)

移动开发前沿的博客 1123

Cupcake Bonuses(UCF Local Programming Contest 2018 E,dfs序 + 线段树)

一.题目链接: Cupcake Bonuses 二.题目大意: 初始有一个员工,有四种操作: 1 i:给第 i 员工一个员工. 2 i m:把第 i 号员工的工资系数置为 m. 3 i b:给第 i 号员工及其所有下属基金为 b 的工资,每个人的实际所获工资等于 基金b * 这个人的工资系数. 4 i:查询第 i 号员工当前已获得的实际工资. 三.分析: 这题直接暴力即可.(比赛...

The___Flash的博客 800

Dinic算法的复杂度分析及证明

一般图 复杂度主要取决于dfs增广的过程。 将dfs部分的复杂度分成两部分来分析:1)修改增广路上边的流量。至多会增广mmm次,一条增广路的长度至多是nnn,所以这一部分的复杂度是O(nm)O(nm)O(nm)。2)dfs遍历时找增广路失败时经过的边。由于一旦从某条边出发找最短路失败了,我们就不会再走那条边(当前弧优化),所以这一部分的复杂度是O(m)O(m)O(m)的。故而dfs增广的复杂度是O...

这个博客已经搬到了:zhongyuwei.github.io 4392

当交警手势遇见边缘计算:轻量化手势识别系统的落地挑战

本文探讨了边缘计算环境下交警手势识别系统的技术挑战与解决方案,结合OpenPose和LSTM算法优化,实现轻量化部署。通过深度可分离卷积、量化感知训练等技术创新,在算力受限的边缘设备上达到高效实时识别,为智能交通系统提供可靠支持。

weixin_29079671的博客 637

UCF Local Programming Contest 2018 E. Cupcake Bonuses dfs序上跑2棵线段树

题解给的暴力,。,一脸怀疑。。。估计数据没有造极限。。 下面说下正解: 像这种区间处理子树,带修改带查询,一看就是dfs序上跑线段树 我们建一颗sm线段树,维护每个员工的S,初始都为0,等员工加进来的时候,给他赋值为S。 1操作:加员工 up函数 2操作:修改每个员工的S值,单点在sm树上修改,up函数 3操作:让一颗子树的所有S乘上B,把所得的值存在另一颗ans线段树上,ans线段树...

bjfu170203101的博客 454

FM20S用户手册--Linux系统启动卡制作及系统固化

评估板出厂时,默认提供一张配套的Micro SD卡,此卡为可正常使用的Linux系统 启动卡。评估板断电,将Linux系统启动卡插入评估板Micro SD卡槽,根据评估底板丝印将 启动方式选择拨码开关拨为1010(1-4).此档位为Micro SD启动模式。使用Linux 系统启动卡启动系统时,将使用此目录的BOOTbn文件启动FSBL和U-Boot。Linux系统启动卡制作时,已将固化系统的脚本文件mkemmcboot.sh拷贝至Linux系 统启动卡文件系统的"/opt/tools/"目录下。

创龙,嵌入式一体化解决方案商 302

程序设计入门竞赛

然后,求d的时候不要掉进坑以为最小的差值就是公差 No!要是最小数值刚好是公差两倍不就错了是吧,所以这个时候就要求各个值之间的最大公因数!懂了吧,这才是本题解题的关键。这道题首先要知道求等差数列的公式。难绷,掉坑里了QAQ。

weixin_63914060的博客 1001

YOLOv11改进 - 卷积Conv | GCNet之金箍棒块GCBlock : 重参数化捕获全局依赖 | CVPR 2025

文介绍了GCBlock在YOLOv11中的结合应用。GCBlock是GCNet的核心组件,能高效捕获特征图中的全局依赖关系,融合了非局部网络和挤压 - 激励网络的优势,降低计算成本并保障模型性能。其遵循“上下文建模 - 特征变换 - 特征融合”框架,通过全局平均池化、全连接层等操作生成注意力权重。我们将GCBlock集成进YOLOv11,替代原有的部分卷积模块,实现更高效的全局上下文建模。实验证明,YOLOv11-GCBlock在目标检测任务中表现出色,展现了GCBlock在深度学习中的广泛应用前景。

魔改工程师的博客 907

利用 SAP Joule 提升 ABAP 开发效率的前提条件与限制全解析

综上,想要在 ABAP Development Tools 中顺利使用 SAP Joule,既要准备好 BTP、IAS、ABAP 系统与 ADT 的版本与信任链,也要理解许可证、配额、语法范围等限制。只有在这些前提全部满足后,Joule 才能真正发挥生成式 AI 的价值,帮助 ABAP 开发者从繁琐模板中解放出来,把注意力投入在业务创新与 Clean Core 改造之上。未来 SAP 还将扩展中文语境、自动修复建议以及跨系统智能代理等功能,值得持续关注。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 664

UCF Local Programming Contest 2016 通过率前七题

A:签到 #include <bits/stdc++.h> using namespace std; typedef long long ll; #define ls (o<<1) #define rs (o<<1|1) #define pb push_back const double PI= acos(-1.0); const int M = 1e5+7...

bjfu170203101的博客 536

redhawk:Low Power Analysis

1.rush current与switch cell 在standby状态下为了控制leakage power我们选择power gating的设计方式,使用power switch cell关闭block/power domain的电源。 power switch的基本介绍可见: 低功耗设计-Power Switch power switch的table中有四种状态,对应block工作、待机和上电,下电。low power analysis主要分析上电的过程。 上电过程可以看做mos电容

m0_61544122的博客 3206

UCF Local Programming Contest 2016 I. Lineup the Dominoes 状态DP

dp[i][j][2],选中多米诺的状态j,以i结尾,i是否翻转。的方案数 答案是: 如果某个多米诺头尾相同,就只加不翻转的方案。 如果全部的多米诺都相同,比如12,12,12这种,总答案要除以二。因为翻转和不翻转会重复同一个方案。 剩下的就是很经典的状态转移了。 #include <bits/stdc++.h> using namespace std; typedef...

bjfu170203101的博客 183

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

UCF Local Programming Contest 2016 H. Count the Dividing Pairs(整除对数)

Number Theory provides many fascinating properties. You have most likely written programs dealing with different groups of numbers such as Prime, Perfect, Amicable, Happy, Powerful, and Untouchable nu...

。 374

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

UCF Local Programming Contest 2016 K. Bouncing Bunnies 最短路

多校给的题解有个地方是错误的: 比如样例 3 1 2 1 1 2 3 答案是2,但题解给的CPP是1. 因为题解吧所有t+h,t-h相同的都缩成一点,但实际上只能缩t+h相同的,和t-h相同的,即开两个mp #include <bits/stdc++.h> using namespace std; typedef long long ll; #define ls (o...

bjfu170203101的博客 472

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

UCF Local Programming Contest 2016 J Rising Tides 【二分】

Description Last May, the UCF Programming Team attended the ACM ICPC World Finals in Phuket, Thailand. Besides the exciting programming contest, Thailand had some great sights to see! The Phang Ng...

醉酒、冰城外 577

UCF Local Programming Contest 2015

文章目录A. Find the TwinsB. Medal RankingC. Brownies vs. Candies vs. CookiesD. Lemonade StandE. Rain Gauge A. Find the Twins #include<cstdio> #include<iostream> #include<algorithm> using...

qq_43721152的博客 375

B . Medal Ranking -UCF Local Programming Contest 2015

https://nanti.jisuanke.com/t/43387 题意   奥运会,分别给出RU和US两国的 金牌 银牌 铜牌 数目     优先度 金牌>银牌>铜牌,其中一种相同则比较下一种,多的一方在color上获胜     总的奖牌数多的一方在count上获胜   判断US能在哪种方式上获胜   水题 代码 #include<iostream> #...

YukiRinLL的博客 308

UCF题目记录

UCF题目记录UCF Local Programming Contest 2013UCF Local Programming Contest 2012UCF Local Programming Contest 2015 UCF Local Programming Contest 2013 全是简单模拟题,没啥好讲的 UCF Local Programming Contest 2012 A.Wall...

Wa的博客 503

Arab Collegiate Programming Contest 2015 计蒜客重现解(补)题报告

B - The Lion King(暴力) 题目链接 In the Pride Lands of Africa, a lion rules over the animals as king. The birth of King Mufasa and QueenSarabi’s son Simba creates envy and resentment in Mufasa’s younger bro...

Happig的博客 534

UCF Local Programming Contest 2018 F. Team Shirts/Jerseys, 搜索+剪枝

很好的一道搜索,看起来时间很大,其实仔细分析,发现时间复杂度是乘法而不是指数。 我们可以先抹除一位或2位数,枚举摸出方案共19个。(10位数,抹除一位有10种,抹除2位有9种) 然后每抹除一个,判断剩下的串是否可以被25个字符串拼成,最坏情况10*25,每个位置判一遍。 总共是10*25*20的复杂度。。 主要别重复增加时间,就很快 才3ms #include <bits/std...

bjfu170203101的博客 492

UCF Local Programming Contest 2016 G. Jedi and the Galactic Empire

1.5hAC,经典状态线性DP,空间不够,压缩空间即可 dp[i][j][k],处理到第i颗子弹,1号冷却j,2号冷却k的最优解 #include <bits/stdc++.h> using namespace std; typedef long long ll; #define ls (o<<1) #define rs (o<<1|1) #define ...

bjfu170203101的博客 344

UCF Local Programming Contest 2018

比赛链接 C题 解题思路: 给予长度为n的数组,数值为 1- n ,可以将数组的数移动到最前或最后的位置,求最后数组从小到大排序时操作的最小次数。 我们发现规律,其中不需要移动的就是连续的上升子序列,所以我们求出最长的连续上升子序列 res, 然后输出 n - res 即可。 代码: #include <iostream> #include <algorithm...

LiangNiuMu的博客 528

UCF Local Programming Contest 2016

比赛链接 E题 解题思路: 模拟题(最近写模拟写多了,真的感觉恶心了) 首先我们将矩阵中的首字母的位置标记好(便于直接找首字母),然后我们找单词时,直接找他的首字母,然后按照上下左右四个方向找(最近总是不敢暴力,总是感觉超时,结果没啥事,时间复杂度得好好算算),然后对于向上和向下找,我们开始赋值都是(2 *n - 1 或者 2 * m - 1,因为这样不会成负值),然后向下后者向右...

LiangNiuMu的博客 487

ICPC North Central NA Contest 2017 - A Stoichiometry(高斯消元)

题目链接 ​You have landed a lucrative contract with Amalgamated Chemical Manufacturing (ACM), to help their chemists with stoichiometry. Stoichiometry is the calculation of reactants and products in chemi...

Happig的博客 426
上一篇: Cupcake Bonuses(UCF Local Programming Contest 2018 E,dfs序 + 线段树)
下一篇: Permutation (HDU - 3811,状压 DP)
The___Flash
博客等级 码龄8年 79粉丝 223原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值