算法笔试模拟题精解之“木棒拼接”

简介: 考虑使用动态规划算法,令dp[i][j]表示在第i中状态中最后一根木棒是第j根木棒的方案数。

【在线编程产品介绍】

阿里云开发者社区在线编程:

免费刷题大神器,助你拿到好offer

周赛月赛不停歇,做题还能领奖品

大赛笔试全真题,常做常新有惊喜

点击链接开始产品体验:https://developer.aliyun.com/coding

本文为大家介绍的是“120.木棒拼接”的解法探究。先来看一下题目内容:

题目详情

等级:困难
知识点:二进制枚举、DP
查看题目:木棒拼接

Codancer现在由n根木棒,第i根木棒的长度为l[i],并且每根木棒只有红、黄、蓝三种颜色。

现在codancer想得到一根长度为L的木棍,codancer可以选择其中的一些按照一定的顺序把这若干根木棒拼接起来,但是codancer要求相邻的两根木棒的颜色不得相同并且木棒的长度总和必须是L。

现在codancer想知道有多少种拼接方案(只要是存在顺序不同或者木棒不同就不是一同种方案)。

由于答案比较大,因此你只需要输出答案对1000000000+7取余的结果即可。

输入n和T,代表木棒的总数和所需要构造的木棍的长度T。
接下来n行,每行两个数组l[i]和c[i],代表第i根木棒的长度和颜色。(1<=n<=15,1<=L<=225,1<=l[i]<=15,1<=c[i]<=3)

输出方案数对10^9+7取余的结果。
示例1
输入:
3
3
[[1,1],[1,2],[1,3]]
输出:
6
注意
所有的排列方案为:
[1,2,3]
[1,3,2]
[2,1,3]
[2,3,1]
[3,1,2]
[3,2,1]

解题思路:动态规划

根据样例所有的排列方案为:
[1,2,3]
[1,3,2]
[2,1,3]
[2,3,1]
[3,1,2]
[3,2,1]
考虑使用动态规划算法,令dpi表示在第i中状态中最后一根木棒是第j根木棒的方案数:
那么可以得到转移方程为:
dp[i|(1<<k)][c[k]]=(dp[i|(1<<k)][c[k]]%mod+dp[i][2]%mod+dp[i][3]%mod)%mod;(c[k]==1)

dp[i|(1<<k)][c[k]]=(dp[i|(1<<k)][c[k]]%mod+dp[i][1]%mod+dp[i][3]%mod)%mod;(c[k]==2)

dp[i|(1<<k)][c[k]]=(dp[i|(1<<k)][c[k]]%mod+dp[i][1]%mod+dp[i][2]%mod)%mod;(c[k]==3)

最后枚举所有的可行性状态计数即可,最终时间复杂度为n*(2^n)
image.png

看完之后是不是有了答题思路了呢,快来练练手吧:120.木棒拼接

在线编程周赛、月赛火热进行中,更有限时答题活动,定制卫衣、双肩背包、机械键盘等多重好礼等你来拿~每天都有好礼相送~点击了解周赛详情:在线编程3月份比赛正式开启!机械键盘等你拿!

b462f1d86b44481ca24c0ad63fe55948.png

相关文章
|
3月前
|
算法 搜索推荐 Java
Java数据结构 -- 常见算法分析(查找算法、排序算法)精解详解!!!
Java数据结构 -- 常见算法分析(查找算法、排序算法)精解详解!!!
28 0
|
3月前
|
编解码 算法 前端开发
往年 | 大疆雷达算法校招笔试题目解析
往年 | 大疆雷达算法校招笔试题目解析
364 1
|
9月前
|
算法
压缩算法 【腾讯2020校园招聘-后台&综合-第一次笔试 】
压缩算法 【腾讯2020校园招聘-后台&综合-第一次笔试 】
55 0
|
算法 网络协议
骚戴独家笔试---算法篇4
骚戴独家笔试---算法篇4
52 1
|
存储 算法
骚戴独家笔试---算法篇3
骚戴独家笔试---算法篇3
187 0
骚戴独家笔试---算法篇3
|
搜索推荐
7大排序算法-- 堆排 快速排序 --精解(下)
7大排序算法-- 堆排 快速排序 --精解(下)
69 0
|
搜索推荐
7大排序算法-- 堆排 快速排序 --精解(上)
7大排序算法-- 堆排 快速排序 --精解
41 0
|
搜索推荐 算法
7大排序算法-- 直接插入,希尔,冒泡,选择 --精解(下)
7大排序算法-- 直接插入,希尔,冒泡,选择 --精解(下)
98 0
|
存储 搜索推荐
7大排序算法-- 直接插入,希尔,冒泡,选择 --精解(上)
7大排序算法-- 直接插入,希尔,冒泡,选择 --精解
70 0
|
算法 Serverless 测试技术
骚戴独家笔试---算法篇5
骚戴独家笔试---算法篇5
47 0

热门文章

最新文章