[hdu6578]Blank
状态f[i][j][k][l]表示前i个数,四种数的最后一次出现的位置分别是i、j、k和l(i>j>k>l),判断所有第右端点为i的区间是否满足此要求(不满足重置为0),考虑第i+1个位置填什么,转移到下一个位置上即可。
这样的时间复杂度看似是$o(Tn^{4})$,实际上由于枚举只需要比上一个数小就行了,还要除以24;空间复杂度通过滚动可以压到$o(n^{3})$,可以卡过去。

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define mod 998244353
4 int t,n,m,x,y,z,ans,ll[105][5],rr[105][5],f[2][105][105][105];
5 void add(int &x,int y){
6 x+=y;
7 if (x>=mod)x-=mod;
8 }
9 int calc(int a,int b,int c,int d,int e){
10 return (e<=a)+(e<=b)+(e<=c)+(e<=d);
11 }
12 int main(){
13 scanf("%d",&t);
14 while (t--){
15 scanf("%d%d",&n,&m);
16 memset(ll,0x3f,sizeof(ll));
17 memset(rr,-1,sizeof(rr));
18 for(int i=1;i<=m;i++){
19 scanf("%d%d%d",&x,&y,&z);
20 ll[y][z]=min(ll[y][z],x);
21 rr[y][z]=max(rr[y][z],x);
22 }
23 memset(f,0,sizeof(f));
24 f[0][0][0][0]=1;
25 ans=0;
26 for(int i=1,p=1;i<=n;i++,p^=1){
27 for(int j=0;(!j)||(j<i);j++)
28 for(int k=0;(!k)||(k<j);k++)
29 for(int l=0;(!l)||(l<k);l++){
30 x=f[p^1][j][k][l];
31 if (x){
32 add(f[p][j][k][l],x);
33 add(f[p][i-1][k][l],x);
34 add(f[p][i-1][j][l],x);
35 add(f[p][i-1][j][k],x);
36 }
37 f[p^1][j][k][l]=0;
38 }
39 for(int j=0;j<i;j++)
40 for(int k=0;(!k)||(k<j);k++)
41 for(int l=0;(!l)||(l<k);l++){
42 for(int q=1;q<=4;q++)
43 if ((calc(i,j,k,l,ll[i][q])>q)||(calc(i,j,k,l,rr[i][q])<q)){
44 f[p][j][k][l]=0;
45 break;
46 }
47 if (i==n)add(ans,f[p][j][k][l]);
48 }
49 }
50 printf("%d\n",ans);
51 }
52 }
[hdu6578]Blank的更多相关文章
- [2019杭电多校第一场][hdu6578]Blank(dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6578 计数问题想到dp不过分吧... dp[i][j][k][w]为第1-i位置中4个数最后一次出现的 ...
- 2019HDU多校第一场1001 BLANK (DP)(HDU6578)
2019HDU多校第一场1001 BLANK (DP) 题意:构造一个长度为n(n<=10)的序列,其中的值域为{0,1,2,3}存在m个限制条件,表示为 l r x意义为[L,R]区间里最多能 ...
- Rails :.nil? , .empty?, .blank? .present? 的区别
.nil? , .empty?, .blank? .present? 的区别 首先这三个都是判空的. 而 .nil? 和 .empty? 是ruby的方法. .blank? 是rails的方法 .ni ...
- ruby : nil?, empty? and blank?的选择
article = nil article.nil? # => true empty? checks if an element - like a string or an array f.e. ...
- git错误:Target branch can't be blank
一.问题描述 遇到一个问题:Target branch can't be blank 因为问题再没有重现,所以拿一张网上的图: 情况是,比如a是项目的owner,有一个项目a/Project. b从a ...
- ruby -- 基础学习(五)empty、nil、blank三者之间的区别
这三个方法在ROR中经常用到,都是用来判断是否为空的. 区别是: ruby的方法:.nil?..empty? rails的方法 :.blank? 用法的区别: .nil? : 判断对象是否存 ...
- django字段设置null和blank的区别
null 这个选项跟数据库有关. null=True的话,数据库中该字段是NULL,即允许空值:null=False(默认)的话,数据库中该字段是NOT NULL,即不允许空值. blank 这个选项 ...
- [转]ConsumeContainerWhitespace property to remove blank space in SSRS 2008 report
转自:http://beyondrelational.com/modules/2/blogs/115/posts/11153/consumecontainerwhitespace-property-t ...
- Java中的blank final
Java allows the creation of blank finals, which are fields that are declared as final but are not gi ...
随机推荐
- 配置Internal Load balancer中VM的外网访问
当在Azure中部署SQL VM时,处于安全考虑,不会配置VM的Public IP,会禁止外网的进出站访问,只允许从内部VNET,或者特定的内部IP访问.特别是当使用Azure Internal Lo ...
- asp.net core使用identity+jwt保护你的webapi(二)——获取jwt token
前言 上一篇已经介绍了identity在web api中的基本配置,本篇来完成用户的注册,登录,获取jwt token. 开始 开始之前先配置一下jwt相关服务. 配置JWT 首先NuGet安装包: ...
- 12. 亿级流量电商系统JVM模型参数二次优化
亿级流量电商系统JVM模型参数预估方案,在原来的基础上采用ParNew+CMS垃圾收集器 一.亿级流量分析及jvm参数设置 1. 需求分析 大促在即,拥有亿级流量的电商平台开发了一个订单系统,我们应该 ...
- RBAC 权限管理模型
一.RBAC模型--基于角色的访问控制 什么是RBAC RBAC(Role-Based Access Control)基于角色的访问控制.这是从传统的权限模型的基础之上,改进而来并且相当成熟的权限模型 ...
- Ruby on Rails 单元测试
Ruby on Rails 单元测试 为什么要写测试文件? 软件开发中,一个重要的环节就是编写测试文件,对代码进行单元测试,确保程序各部分功能执行正确.但是,这一环节很容易被我们轻视,认为进行单元测试 ...
- Kruskal重构树-进阶
例题一:区间最小生成树(NKOJ P8439) 简要题意: 一个n个点m条边的无向图,点编号1到n,边编号1到m.边有边权. 有q次操作,操作分两种: 1.k x y z:修改第k条边,使其连接的两点 ...
- 零基础入门Linux有什么好的学习方法吗?(超详细)
本节旨在介绍对于初学者如何学习 Linux 的建议,在这里不具体分析Linux的学习节点只分析对于零基础的伙伴的学习方法.那么如果你已经确定对 Linux 产生了兴趣,那么接下来我们介绍一下学习 Li ...
- 痞子衡嵌入式:超级下载算法RT-UFL v1.0在Segger Ozone下的使用
痞子衡主导的"学术"项目 <RT-UFL - 一个适用全平台i.MXRT的超级下载算法设计> v1.0 版发布近 4 个月了,部分客户已经在实际项目开发调试中用上了这个 ...
- sed初理多行合并+sed之G、H、g、h使用+sed n/N使用说明
转载:[shell]sed处理多行合并 - seyjs - 博客园 (cnblogs.com) 文件格式 table=t1 name owner address table=t2 id text co ...
- 树形DP 枚举祖宗的例题
这类题目是真的很头疼....其实这类题目的特征也很明显,叶子结点贡献答案时和其所在链的祖宗有关,也就是说要想得知其贡献必须知道他的所有祖宗的贡献,其实处理方法也不是太难,就是在dfs枚举时顺便把祖宗的 ...