正题

题目链接:https://www.luogu.com.cn/problem/AT2161


题目大意

长度为nnn的0/10/10/1串,mmm个区间,你可以按照顺序任意排列区间中的数字,求最后的可能情况数。
保证给出区间的左端点不降。

1≤n,m≤30001\leq n,m\leq 30001≤n,m≤3000


解题思路

先去掉一些没用区间然后空位补上长度为111的区间。
设fi,jf_{i,j}fi,j​表示处理到第iii个区间并且到下一个区间前已经有jjj个一了。

然后每次枚举这段区间和下一段区间不交的部分放多少个一,不难发现这个总复杂度是O(n)O(n)O(n)的。

时间复杂度O(n2)O(n^2)O(n2)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=3100,P=1e9+7;
ll n,m,cnt,w[N],C[N][N],l[N],r[N],f[N][N];
char s[N];
signed main()
{scanf("%lld%lld",&n,&cnt);scanf("%s",s+1);C[0][0]=1;for(ll i=1;i<=n;i++)w[i]=w[i-1]+(s[i]=='1');for(ll i=1;i<=n;i++)for(ll j=0;j<=i;j++)C[i][j]=(C[i-1][j]+(j?C[i-1][j-1]:0))%P;for(ll i=1,L,R;i<=cnt;i++){scanf("%lld%lld",&L,&R);if(R<=r[m])continue;else if(L==l[m])r[m]=R;else{for(ll j=r[m]+1;j<L;j++)++m,l[m]=r[m]=j;++m;l[m]=L;r[m]=R;}}for(ll i=r[m]+1;i<=n;i++)++m,l[m]=r[m]=i;l[m+1]=r[m+1]=n+1;f[0][0]=1;for(ll i=1;i<=m;i++){ll q=l[i+1]-l[i],b=r[i]-l[i]+1;for(ll j=0;j<l[i];j++){ll s=w[r[i]]-j,t=s-(r[i]-l[i+1]+1);for(ll k=max(t,0ll);k<=min(q,s);k++)(f[i][j+k]+=f[i-1][j]*C[q][k]%P)%=P; }}printf("%lld\n",f[m][w[n]]);return 0;
}

AT2161-[ARC065D]シャッフル/Shuffling【dp】相关推荐

  1. 【DP】【期望】$P1850$换教室

    [DP][期望]\(P1850\)换教室 链接 题目描述 有 \(2n\) 节课程安排在$ n$ 个时间段上.在第 \(i\)(\(1 \leq i \leq n\))个时间段上,两节内容相同的课程同 ...

  2. Bailian2760 数字三角形【DP】

    2760:数字三角形 描述 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 (图1) 图1给出了一个数字三角形.从三角形的顶部到底部有很多条不同的路径.对于每条路径,把路径上面的数加起来可 ...

  3. NUC1131 Triangle【DP】

    Triangle 时间限制: 1000ms 内存限制: 65536KB 通过次数: 1总提交次数: 1 问题描述 图1表示一个数字三角形. 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 ...

  4. LeetCode:完全平方数【279】【DP】

    LeetCode:完全平方数[279][DP] 题目描述 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n.你需要让组成和的完全平方数的个数最少. 示 ...

  5. 【DP】序列 题解

    [DP]序列 题解 序列 题目 一个长度为kkk的整数序列bbb 1,bbb 2,-,bkbkbk(1≤bbb 1≤bbb 2≤-≤bkbkbk≤NNN)称为"好序列"当且仅当后一 ...

  6. poj 2411 Mondriaan#39;s Dream 【dp】

    题目:poj 2411 Mondriaan's Dream 题意:给出一个n*m的矩阵,让你用1*2的矩阵铺满,然后问你最多由多少种不同的方案. 分析:这是一个比較经典的题目.网上各种牛B写法一大堆. ...

  7. BestCoder冠军赛 - 1005 Game 【DP】

    [题意] 给出一个set,set中有几个数. 现在给出n个人,环成一圈搞约瑟夫... 开始时从第1号报数,每次从set中随机选出一个数s,等报数到s后,报s的人出圈,其他人继续报数. 最后只剩1人时, ...

  8. 【9.22校内测试】【可持久化并查集(主席树实现)】【DP】【点双联通分量/割点】...

    1 build 1.1 Description 从前有一个王国,里面有n 座城市,一开始两两不连通.现在国王将进行m 次命令,命令可 能有两种,一种是在u 和v 之间修建道路,另一种是询问在第u 次命 ...

  9. zzuliOJ 1894: 985的方格难题 【dp】

    1894: 985的方格难题 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 369  Solved: 75 Description 985走入了一个n ...

最新文章

  1. HTML产品表单列表,HTML表格、列表、表单
  2. 30天敏捷生活(3):设计你的生活看板
  3. 鲁迅散文——狗的驳诘
  4. 10 分钟快速入门海量数据搜索分析引擎 Elasticearch
  5. black.lst 丢失或被破坏,怎么解决
  6. docker安装ubuntu镜像
  7. 2021高通人工智能创新大赛垃圾分类赛题第五次研讨会
  8. LeetCode 71. Simplify Path
  9. VSCode 中文乱码
  10. 百度文库Android、Iphone客户端——下载、阅读无需财富值积分
  11. 微信能通过服务器改数据解封吗,【微信新规】微信永久封号官方解封方法
  12. ElmentUI数据表格 序号
  13. Spring Cloud 与 Dubbo 优缺点详解
  14. C++安装失败解决办法
  15. 教师评计算机课缺点及建议,评课用语优缺点及建议
  16. python的dev包怎么安装_python-dev如何安装 sudo apt-get install python-dev ?
  17. ZBrush控制撤销历史记录次数
  18. 高仿微信6.5.7(融云版)
  19. 华中科技大-汉明校验码设计
  20. 测量学10_建筑工程测量及道路工程测量

热门文章

  1. oracle绑定变量过多,oracle - 在SQL Plus中使用绑定变量并返回多行? - 堆栈内存溢出...
  2. ef 关联依赖属性_基础巩固之:xmlns属性梳理
  3. java 线程访问控件_C#多线程与跨线程访问界面控件的方法
  4. 机器学习与气象数据_气象大数据与机器学习联合实验室 大数据和气象的“联姻”...
  5. s2 安恒 漏洞验证工具_Struts2漏洞利用工具下载(更新2017-V1.8版增加S2-045/S2-046)
  6. PTA 7-3 地铁一日游 (30 分)
  7. 后端学习 - 计算机网络
  8. 解决浏览器存储问题,不得不了解的cookie,localStorage和sessionStorage
  9. 计算机学科的三大科学形态,华中科技大学 计算机科学与技术方法论 3计算学科中的三个学科形态.ppt...
  10. [Java基础]线程基础与实现多线程