【AGC013D】Pilling Up dp
Description
红蓝球各无限多个.
初始时随意地从中选择 n 个, 扔入箱子
初始有一个空的序列
接下来依次做 m 组操作, 每组操作为依次执行下述三个步骤
(1) 从箱子中取出一个求插入序列尾
(2) 往箱子里补充 一红一蓝
(3) 从箱子中取出一个求插入序列尾
求 mm 次操作后, 有多少种不同的颜色序列, 答案对 109+7 取模
Input
第一行两个数 n,mn,m .
Output
一个数 ans 表示答案对 10^9+7 取模的值.
Sample Input
# 样例输入1
2 3
# 样例输入2
1000 10
# 样例输入3
1000 3000
Sample Output
# 样例输出1
56
# 样例输出2
1048576
# 样例输出3
693347555
HINT
样例解释1
一共有 6 个球会被从盒子中取出.
一个方案是不合法的当且仅当第 2,3,4,5 个球的颜色完全相同.
所以答案为 26−23=56
数据范围
n,m≤3000
Sol
定义\(f[i][j]\)为进行i轮,红球j个的方案数,然后跑普及组dp,但是这样会重复,原因:一个最终序列可能是由多个初始集合生成的。但是我们发现,如果开始有i个红球能够生成一个序列,i+j个也可以,那么我们找到这个最小的i,可以发现一定会用完,所以再加一维\([0/1]\)表示有没有用完过红球,然后就不会有重复了。
Code
#include <cstdio>
int n,m,f[3005][3005][2],ans;const int P=1e9+7;
int main()
{
scanf("%d%d",&n,&m);f[0][0][1]=1;
for(int i=1;i<=n;i++) f[0][i][0]=1;
for(int i=0;i<m;i++) for(int j=0;j<=n;j++) for(int k=0;k<=1;k++)
{
if(j) f[i+1][j-1][k|!(j-1)]=(f[i+1][j-1][k|(j==1)]+f[i][j][k])%P;
if(n-j) f[i+1][j+1][k]=(f[i+1][j+1][k]+f[i][j][k])%P;
if(j) f[i+1][j][k|(j==1)]=(f[i+1][j][k|(j==1)]+f[i][j][k])%P;
if(n-j) f[i+1][j][k]=(f[i+1][j][k]+f[i][j][k])%P;
}
for(int i=0;i<=n;i++) ans=(ans+f[m][i][1])%P;
printf("%d\n",ans);
}
【AGC013D】Pilling Up dp的更多相关文章
- 【agc013d】Piling Up(动态规划)
[agc013d]Piling Up(动态规划) 题面 atcoder 洛谷 有\(n\)个球,颜色为黑白中的一种,初始时颜色任意. 进行\(m\)次操作,每次操作都是先拿出一个求,再放进黑白各一个, ...
- 【题解】POJ1934 Trip (DP+记录方案)
[题解]POJ1934 Trip (DP+记录方案) 题意: 传送门 刚开始我是这么设状态的(谁叫我DP没学好) \(dp(i,j)\)表示钦定选择\(i\)和\(j\)的LCS,然而你会发现这样钦定 ...
- 【题解】剪纸条(dp)
[题解]剪纸条(dp) HRBUST - 1828 网上搜不到题解?那我就来写一篇吧哈哈哈 最优化问题先考虑\(dp\),设\(dp(i)\)表示将前\(i\)个字符(包括\(i\))分割成不相交的回 ...
- 【题解】地精部落(DP)
[题解]地精部落(DP) 设\(f_i\)表示强制第一个是谷的合法方案数 转移枚举一个排列的最大值在哪里,就把序列分成了互不相干的两个部分,把其中\(i-1\choose j-1\)的数字分配给前面部 ...
- 【BZOJ-1068】压缩 区间DP
1068: [SCOI2007]压缩 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1001 Solved: 615[Submit][Status][ ...
- 【BZOJ-1492】货币兑换Cash DP + 斜率优化 + CDQ分治
1492: [NOI2007]货币兑换Cash Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 3396 Solved: 1434[Submit][Sta ...
- 【递归】油桶问题dp
问题 : [递归]油桶问题 题目描述 楚继光扬扬得意道:“当日华山论剑,先是他用黯然销魂掌破了我的七十二路空明拳,然后我改打降龙十八掌,却不防他伸开食指和中指,竟是六脉神剑,又胜我一筹.可见天下武学彼 ...
- 【HDU3247】 Resource Archiver(DP+AC自动机+最短路)
Resource Archiver Time Limit: 10000MS Memory Limit: 100000KB 64bit IO Format: %I64d & %I64u ...
- 【CF944G】Coins Exhibition DP+队列
[CF944G]Coins Exhibition 题意:Jack去年参加了一个珍稀硬币的展览会.Jack记得一共有 $k$ 枚硬币,这些硬币排成一行,从左到右标号为 $1$ 到 $k$ ,每枚硬币是正 ...
随机推荐
- keil的使用:新建Project
新建项目--->新建文件夹----->把新建的项目放在自己的文件夹中------>选择开发板------>添加开发板的驱动文件---->main函数 项目分组基本如图,S ...
- IDE 文件查找快捷键被占
快捷键 Ctrl+Shift+F 被搜狗输入法抢占了. 打开搜狗输入法里的快捷键设置,去掉,my ide is ok!
- libevent网络编程汇总
libevent源码剖析: ========================================================== 1.libevent源码剖析一(序) 2.libeve ...
- oracle xe远程访问
oracle xe其实监听了1521端口 netstat -ano|findstr 只是没请求防火墙权限而已. 手动打开防火墙1521端口 管理员运行下面的命令 本机环境win10 netsh adv ...
- CronTrigger表达式和Quartz使用实例入门
CronTriggers往往比SimpleTrigger更有用,如果您需要基于日历的概念,而非SimpleTrigger完全指定的时间间隔,如每月8日发工资的定时任务. CronTrigger,你可以 ...
- C++11中lock_guard和unique_lock的区别
c++11中有一个区域锁lock_guard,还有第二个区域锁unique_lock. 区域锁lock_guard使用起来比较简单,除了构造函数外没有其他member function,在整个区域都有 ...
- SpringBoot RestController 同时支持返回xml和json格式数据
@RestController 默认支持返回json格式数据,即使不做任何配置也能返回json数据 当接口需要支持xml或json两种格式数据时应该怎么做呢? 只要引入 Jackson xml的 ma ...
- 转-使用wifi调试程序
转自:http://www.cnblogs.com/sunzhenxing19860608/archive/2011/07/14/2106492.html 数据线丢了,不想花钱去买,在网上看了看,an ...
- 23-单词数(HDU2070)
单词数 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- 性能优化之_android多线程
本文大纲为: 如何创建线程 线程间如何通讯 线程间如何安全的共享信息 一.线程的创建 Thread在run方法中执行具体事务,或者传入一个runnable对象,但是不能调用view控件的更新方法,但是 ...