【每日一题】7月20日题目精讲—着色方案

来源:牛客网:

文章目录

    • 题目描述
    • 题解:
    • 代码:

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

有n个木块排成一行,从左到右依次编号为1~n。 你有k种颜色的油漆,其中第i种颜色的油漆足够涂ci个木块。
所有油漆刚好足够涂满所有木块,即c1+c2+…+ck=n。
相邻两个木块涂相同色显得很难看,所以你希望统计任意两个相邻木块颜色不同的着色方案。

输入描述:

第一行为一个正整数k,第二行包含k个整数c1, c2, … , ck。

输出描述:

输出一个整数,即方案总数模1,000,000,007的结果。

示例1
输入
复制

3
1 2 3

输出
复制

10

1<=k<=15 ,1<= ci <=5

题解:

记忆化搜索
dp[a][b][c][d][e][last]
表示每一种颜色分别剩下啊a,b,c,d,e个方案数,有a种一个(可以涂1块木块的有多少种颜色),b种两个,c种三个…e种五个,last表示上一次用的是可以涂last个木块的油漆
因为我们不能连续涂两块相同的颜色,如果上一次用的还能涂i次的油漆,那么当前就多一种还能涂i-1次的油漆未使用
所以如果b-1的话,a要+1,一次类推都是这样
然后考虑转移方程:

dp[a][b][c][d][e][1]=dp[a-1][b][c][d][e][1]*a+dp[a+1][b-1][c][d][e][2]*b+dp[a][b+1][c-1][d][e][3]*c+dp[a][b][c+1][d-1][e][4]*d+dp[a][b][c][d+1][e-1][5]*e 

我们在递推中可以写成这种形式

if(a1) ans = (ans + 1ll * (a1 - (last == 2)) * dfs(a1 - 1, a2, a3, a4, a5, 1)) % mod;

(last==2)则是特判上一种颜色的种类,否则会造成重复

代码:

#include <bits/stdc++.h>const int mod = 1e9 + 7;
using namespace std;typedef long long ll;inline ll read() {ll f = 1, x = 0;char c = getchar();while(c < '0' || c > '9') {if(c == '-')    f = -1;c = getchar();}while(c >= '0' && c <= '9') {x = (x << 1) + (x << 3) + (c ^ 48);c = getchar();}return f * x;
}void print(ll x) {if(x < 10) {putchar(x + 48);return ;}print(x / 10);putchar(x % 10 + 48);
}ll dp[20][20][20][20][20][10];
int n, a[10];ll dfs(int a1, int a2, int a3, int a4, int a5, int last) {if(dp[a1][a2][a3][a4][a5][last]) return dp[a1][a2][a3][a4][a5][last];ll ans = 0;if(a1) ans = (ans + 1ll * (a1 - (last == 2)) * dfs(a1 - 1, a2, a3, a4, a5, 1)) % mod;if(a2) ans = (ans + 1ll * (a2 - (last == 3)) * dfs(a1 + 1, a2 - 1, a3, a4, a5, 2)) % mod;if(a3) ans = (ans + 1ll * (a3 - (last == 4)) * dfs(a1, a2 + 1, a3 - 1, a4, a5, 3)) % mod;if(a4) ans = (ans + 1ll * (a4 - (last == 5)) * dfs(a1, a2, a3 + 1, a4 - 1, a5, 4)) % mod;if(a5) ans = (ans + 1ll * a5 * dfs(a1, a2, a3, a4 + 1, a5 - 1, 5)) % mod;return dp[a1][a2][a3][a4][a5][last] = ans;
}int main() {n = read();for(int i = 1; i <= n; i++) {int x = read();a[x]++;}for(int i = 1; i <= 5; i++) dp[0][0][0][0][0][i] = 1;print(dfs(a[1], a[2], a[3], a[4], a[5], 0));return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319656.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

COSCon'18 面向全宇宙招募志愿者啦!

2018 中国开源年会&#xff08;COSCon18-China Open Source Conference 2018) 志愿者招募工作今日正式启动&#xff01;我们诚挚地欢迎开源社区的朋友们及高校的同学们加入志愿工作者团队&#xff0c;与国内外众多开源项目基金会、公司、大神等齐聚一堂&#xff0c;共襄盛举。招…

CF346E-Doodle Jump【类欧】

正题 题目链接:https://www.luogu.com.cn/problem/CF346E 题目大意 给出a,n,p,ha,n,p,ha,n,p,h&#xff0c;在每个ax%p(x∈[0,n])ax\%p(x\in[0,n])ax%p(x∈[0,n])的位置有一个关键点&#xff0c;询问是否所有相邻关键点之间的距离都不超过hhh。 解题思路 没怎么写过类欧&…

【AC自动机】病毒代码(ybtoj AC自动机-5)

正题 ybtoj AC自动机-5 题目大意 给出若干段01串&#xff0c;问你是否存在一个无限的01串&#xff0c;使得串中不存在给出的01串 解题思路 可以把给出01串用AC自动机处理&#xff0c;然后对每个01串的最后一位打上标记 根据AC自动机的连边性质&#xff08;即若无该边&#…

AtCoder Beginner Contest 176总结

由于打球又鸽了一场&#xff0c;快开学了好好打球&#xff01;&#xff01;&#xff01;&#xff08;狗头 还是补一补 A - Takoyaki 签到题 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<iostream> #include<a…

讲重点,看趋势——Microsoft Ignite 2018的回顾和展望

一年一度的微软技术大会——Microsoft Ignite 2018上周在奥兰多召开&#xff0c;目前已经落下帷幕。我没有去现场&#xff0c;但据说这次的盛况空前&#xff0c;创下微软之最。确实&#xff0c;这些年来&#xff0c;微软内部非常重视 Iginte&#xff0c;上至最高管理层&#xf…

P4590-[TJOI2018]游园会【dp套dp】

正题 题目链接:https://www.luogu.com.cn/problem/P4590 题目大意 给出一个长度为mmm的字符串sss。 对于每个k∈[0,m]k\in[0,m]k∈[0,m]求有多少个长度为nnn的字符串满足与sss的最长公共子序列长度为kkk且不包含NOINOINOI这一个子串。 可用字符集是{N,O,I}\{N,O,I\}{N,O,I} 解…

【DP】【线段树】基站选址(luogu 2605/金牌导航 数据结构优化DP-2)

正题 luogu 2605 金牌导航 数据结构优化DP-2 题目大意 有若干个村庄在一条直线上&#xff0c;距离第一个村庄did_idi​&#xff0c;在该村庄建立基站要花费cic_ici​&#xff0c;如果在离该村不大于sis_isi​的范围内有一个基站&#xff0c;那么该村会被信号覆盖&#xff0c;…

Fake Maxpooling(2020多校第二场F)

Fake Maxpooling&#xff08;2020多校第二场F&#xff09; 文章目录题意&#xff1a;题解&#xff1a;代码&#xff1a;题意&#xff1a; 一个n * m的矩阵&#xff0c;第i行第j列的值是lcm&#xff08;i&#xff0c;j&#xff09;&#xff0c;然后给定一个 k * k的子矩阵&…

Educational Codeforces Round 94 (Rated for Div. 2)

这次做了ABCD&#xff0c;今天下午就要上学去了溜了溜了&#xff0c;早上起来补的题解。 A - String Similarity 分析可知可构造w[i]s[2*i]即可满足题意 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<string> #in…

算法工程师的危机

本文为沙漠之鹰第68篇原创文章9月20号讯飞AI同传语音造假的新闻刷爆科技圈&#xff0c;科大讯飞股价应声下跌3.89%&#xff08;不是65.3%&#xff0c;标题党文章害死人&#xff09;。 吃瓜群众纷纷感慨&#xff0c;有多少人工&#xff0c;就有多少智能。小编偷换概念玩的溜AI概…

Cover the Tree(2020多校第二场C)

Cover the Tree 文章目录题意&#xff1a;题解&#xff1a;代码题意&#xff1a; 一个无向树&#xff0c;选择最少数量的链子&#xff0c;能将树上所有边覆盖&#xff0c;答案不唯一 (1≤n≤2105&#xff09; 链子就是两点之间的边 看看样例 输入 5 1 2 1 3 2 4 2 5输出 2 2…

【DP】【树状数组】折线统计(金牌导航 数据结构优化DP-1)

正题 金牌导航 数据结构优化DP-1 题目大意 平面上有n个点&#xff0c;让你选择若干点&#xff0c;连接x坐标相邻的点&#xff0c;其中连续上升或下降的为一段&#xff0c;问你有多少中选择方案&#xff0c;使得段数为k 解题思路 设fi,j,0/1f_{i,j,0/1}fi,j,0/1​为到第i个点…

AtCoder Beginner Contest 177总结

回学校第一次打AtCoder&#xff0c;感觉晚上在寝室打不在状态~~ A - Don’t be late 数学题签到 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #include<iostream> #include<algorithm> using namespace std; typedef long long ll; const in…

[模板]多项式全家桶小记(求逆,开根,ln,exp)

前言 这里的全家桶目前只包括了ln,exp,sqrtln,exp,sqrtln,exp,sqrt。还有一些类似于带余数模&#xff0c;快速幂之类用的比较少的有时间再更&#xff0c;NTTNTTNTT这种前置知识这里不多说。 还有一些基本的导数和微积分内容要了解&#xff0c;建议不懂的可以先去翻翻高二数学…

牛客网【每日一题】7月21日题目精讲—区间权值

来源&#xff1a;牛客网&#xff1a; 区间权值 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 1048576K&#xff0c;其他语言2097152K 64bit IO Format: %lld题目描述 输入描述: 第一行一个正整数 n 第二行 n 个正整数 a1…an 第三行 n 个正…

【DP】【树状数组】免费馅饼(luogu 7302/金牌导航 数据结构优化DP-4)

正题 luogu 7302 金牌导航 数据结构优化DP-4 题目大意 在坐标轴上会出现n个金币&#xff0c;第i个金币tit_iti​时在wiw_iwi​出现&#xff08;只出现一个单位时间&#xff09;&#xff0c;价值为sis_isi​&#xff0c;当你tit_iti​时在wiw_iwi​&#xff0c;就能获得该金币…

Codeforces Round #666 (Div. 2)

哎太菜了就做出2个题掉了19分~~ A - Juggling Letters 统计一下每个字母出现的次数&#xff0c;由于最后要平均分配到每个数组中那么每个字母出现次数应该是n的倍数 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #include<string> #include<iost…

C# 函数式编程:LINQ

一直以来&#xff0c;我以为 LINQ 是专门用来对不同数据源进行查询的工具&#xff0c;直到我看了这篇十多年前的文章&#xff0c;才发现 LINQ 的功能远不止 Query。这篇文章的内容比较高级&#xff0c;主要写了用 C# 3.0 推出的 LINQ 语法实现了一套“解析器组合子&#xff08;…

【DP】【树状数组】方伯伯的玉米田/优美玉米(luogu 3287/金牌导航 数据结构优化DP-5)

正题 luogu 3287 金牌导航 数据结构优化DP-5 题目大意 有n个玉米&#xff0c;给出高度&#xff0c;你可以选择一个区间&#xff0c;使这个区间的玉米高度1&#xff0c;你可以进行k次这样的操作&#xff0c;查询你操作完后最长不下降子序列最大值 代码 对于选择区间[l,r]&…

2020牛客暑期多校训练营(第六场)

2020牛客暑期多校训练营&#xff08;第六场&#xff09; 额&#xff0c;睡了一下午&#xff0c;直接错过了比赛。。。 文章目录A African Sort题意&#xff1a;题解&#xff1a;代码&#xff1a;B Binary VectorC Combination of Physics and Maths题意&#xff1a;题解&#x…