CF1105C Ayoub and Lost Array ——动态规划
题意:
一个整数数组,满足:
1. 长度为n
2. 所有元素都在[l, r]范围内
3. 所有元素的和能被3整除
给出n, l, r (1 ≤ n ≤ 2*10^5,1 ≤ l ≤ r ≤ 10^9)
请找出符合条件的数组的个数,答案对 10^9 + 7取模
首先我们要处理出[l, r]中对3取模得结果分别为0,1,2的数的个数,在一个合乎要求的数组中,结果为1和2的数的个数必然一样,由此就可以很方便地得到所有可能的组合的个数。但新的问题来了,由于可以选用相同的数,求出这些组合的排列数几乎是一个不可能完成的任务(对我这种蒟蒻来说)。
换一种思路,我们一个数一个数地添,并把所有可能的情况都考虑进去:
设dp[i][j]表示有i个数,且它们的和对3取模结果为j的数组个数,数组num[i]中记录了[l, r]中对3取模得结果为i的数的个数
显然dp[1][j] = num[j],随后,向已有的数组的尾部添加新的数字,例如:
dp[i][0] = dp[i - 1][0] * num[0] + dp[i - 1][1] * num[2] + dp[i - 1][2] * num[1]
dp[i][1]和dp[i][2]的情况同理,递推到n,dp[n][0]就是我们要的答案。
为什么是添加到尾部?不能插入到某个数字前吗?这样做会不会漏情况?
实际上,插入到某个数字之前会带来重复(会有另一个数被顶到尾部),举个例子:现在前i - 1个数的和对3取模结果为1,要添加一个结果为2的数,即dp[i - 1][1] * num[2],如果把它插入到前面,使一个对3取模结果为1的数被顶到了前面的话,显然就与dp[i - 1][2] * num[1]的情况重复了,另外两种情况同理。
附关键部分代码,欢迎纠错。
const int mod = 1e9 + ;
const int maxn = 2e5 + ;
ll dp[maxn][];//有i个数,且它们的和对3取模结果为j的数组个数
int main()
{
//num[i]记录了对3取模结果为i的数的个数
dp[][] = num[], dp[][] = num[], dp[][] = num[];
for(int i = ; i <= n; i++)
{
dp[i][] = (dp[i - ][] * num[]) % mod + (dp[i - ][] * num[]) % mod + (dp[i - ][] * num[]) % mod;
dp[i][] %= mod;
dp[i][] = (dp[i - ][] * num[]) % mod + (dp[i - ][] * num[]) % mod + (dp[i - ][] * num[]) % mod;
dp[i][] %= mod;
dp[i][] = (dp[i - ][] * num[]) % mod + (dp[i - ][] * num[]) % mod + (dp[i - ][] * num[]) % mod;
dp[i][] %= mod;
}
cout << dp[n][] << endl;
}
CF1105C Ayoub and Lost Array ——动态规划的更多相关文章
- C. Ayoub and Lost Array cf dp
C. Ayoub and Lost Array time limit per test 1 second memory limit per test 256 megabytes input stand ...
- Codeforces 1105C: Ayoub and Lost Array(递推)
time limit per test: 1 second memory limit per test: 256 megabytes input: standard input output: sta ...
- Codeforces Round #533 (Div. 2) C. Ayoub and Lost Array 【dp】
传送门:http://codeforces.com/contest/1105/problem/C C. Ayoub and Lost Array time limit per test 1 secon ...
- C. Ayoub and Lost Array
链接 [https://codeforces.com/contest/1105/problem/C] 题意 给你n,表示数组长度,元素的值是l到r,问有多少种方案使得所有元素和整除3 分析 思维dp, ...
- Codeforces 1105C Ayoub and Lost Array (计数DP)
<题目链接> 题目大意: 有一个长度为 n 的数列的未知数列,数列的每一个数的值都在区间 [l,r] 的范围内.现在问你能够构成多少个这样的数组,使得数组内的所有数的和能够被 3 整除. ...
- C. Ayoub and Lost Array(DP)
(又是被队友带着上分的一场--) 题目链接:http://codeforces.com/contest/1105/problem/C 题目大意:给你n,l,r.每一个数都是在l,r范围之内,然后问你这 ...
- CF1155D Beautiful Array(动态规划)
做法 \(f_{i,0}\)表示以\(i\)结尾未操作时的最大值 \(f_{i,1}\)表示以\(i\)结尾正在操作时的最大值 \(f_{i,2}\)表示以\(i\)结尾已结束操作时的最大值 Code ...
- C. Ayoub and Lost Array Round #533 (Div. 2) 【DP】
一.题面 链接 二.分析 关于这题,两个点. 第一个点,是需要能够分析出$[L,R]$区间的3的余数的个数. 首先,可以得到,$[L,R]$区间内共有$(R-L+1)$个数. 设定余数为0,1,2的为 ...
- Codeforces Round #533(Div. 2) C.Ayoub and Lost Array
链接:https://codeforces.com/contest/1105/problem/C 题意: 给n,l,r. 一个n长的数组每个位置可以填区间l-r的值. 有多少种填法,使得数组每个位置相 ...
随机推荐
- 解决GitHub push项目——Push failed: Unable to access 'https://********.git/': Failed to connect to 127.0.0.1 port 1080: Connection refused
解决方法: 第一步:在git中设置http代理 git config --global http.proxy 第二步:在git中取消http代理 git config --global --unset ...
- wepy的第一个demo
一.在node中安装相应的模块文件,查看文档 二.案例 json部分 { "usingComponents": { "van-button": ".. ...
- 2-基于6U VPX的双TMS320C6678+Xilinx FPGA K7 XC7K420T的图像信号处理板
基于6U VPX的双TMS320C6678+Xilinx FPGA K7 XC7K420T的图像信号处理板 综合图像处理硬件平台包括图像信号处理板2块,视频处理板1块,主控板1块,电源板1块,VPX背 ...
- python特殊的类属性
类C的特殊属性: C.__name__ 类C的名字 C.__doc__ 类C文档字符串 C.__bases__ 类C所有父类的元组 C.__dict__ 类C的属性 C.__module__ 类C所在 ...
- ls 显示目录下的内容和文件相关属性信息
1.命令功能 ls命令是“list directory contents”,显示当前目录下的内容和文件属性. 2.语法格式 ls [option] file ls 选项 文件名 3.选项说明 ...
- 027:for标签使用详解
for标签使用详解: for...in... 标签: for...in... 类似于 Python 中的 for...in... .可以遍历列表.元组.字符串.字典等一切可以遍历的对象.示例代码如下: ...
- AutoLayout面试题记录-用NSLayoutConstraint写动画
import UIKit class ViewController: UIViewController { @IBOutlet weak var topY: NSLayoutConstraint! @ ...
- BZOJ 3879: SvT 虚树 + 后缀自动机
Description (我并不想告诉你题目名字是什么鬼) 有一个长度为n的仅包含小写字母的字符串S,下标范围为[1,n]. 现在有若干组询问,对于每一个询问,我们给出若干个后缀(以其在S中出现的起始 ...
- [NOIP2014]飞扬的小鸟[DP]
[NOIP2014]飞扬的小鸟 ——!x^n+y^n=z^n 题目描述: Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画 ...
- [CSP-S模拟测试]:不等式(数学)
题目描述 小$z$热衷于数学.今天数学课的内容是解不等式:$L\leqslant S\times x\leqslant R$.小$z$心想这也太简单了,不禁陷入了深深的思考:假如已知$L,R,S,M$ ...