[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 ...
随机推荐
- 简单Tab切换
延迟Tab切换,使用css中的flex布局,原生js实现.(京东首页菜单也有此延迟功能哦!) 每天进步一丢丢~~ 1.延迟Tab切换 <!DOCTYPE html> <html la ...
- IDA硬编码修改SO,重新打包APK绕过FRIDA反调试
该案例来自看雪 通过IDA修改SO 找到检测点 修改字符串 双击该字符串进入TEXT VIEW 选择 HEX VIEW 修改十六进制 右击EDIT 修改字符 右击 菜单栏-> edit -> ...
- 华为在HDC2021发布全新HMS Core 6 宣布跨OS能力开放
[2021年10月22日·东莞]华为开发者大会 2021(Together)于今天正式开幕,华为在主题演讲中正式发布全新的HMS Core 6,向全球开发者开放7大领域的69个Kit和21,738个A ...
- 分布式表示(Distributed Representation)
NLP模型笔记 - 分布式表示 ziuno 2020-03-08 19:52:50 410 收藏 2 分类专栏: NLP 模型 笔记 文章标签: nlp 最后发布:2020-03-08 19:52:5 ...
- Python语法1
变量 命名规则 变量名必须是大小写英文字母.数字或下划线 _ 的组合,不能用数字开头,并且对大小写敏感 变量赋值 同一变量可以反复赋值,而且可以是不同类型的变量 i=2; i="name&q ...
- k8s replicaset controller 分析(3)-expectations 机制分析
replicaset controller分析 replicaset controller简介 replicaset controller是kube-controller-manager组件中众多控制 ...
- 混合开发框架Flutter
Flutter开发简介与其他的混合开发的对比 为什么要使用Flutter? 跨平台技术简介 Hybrid技术简介 QT简介 Flutter简介 为什么要使用Flutter? Flutter有什么优势? ...
- 【二食堂】Alpha - Scrum Meeting 10
Scrum Meeting 10 例会时间:4.20 18:00~18:20 进度情况 组员 昨日进度 今日任务 李健 1. 与柴博合作完成登录注册页面issue 继续完成登录注册页面issue 柴博 ...
- 2021.1.8 NKOJ 周赛总结
意料之中..... A:nkoj 3900 AC小程序 http://oi.nks.edu.cn/zh/Problem/Details/3900 A题比较简单,单独分析一下A和C,其实就是一个斐波那契 ...
- windows下wchar_t的问题
使用vs新建工程或者编译工程的时候默认在编译设置里面讲wchar_t设置为内置类型,如下图: 但是在编译相互依赖的工程的时候,如果有的工程不将wchar_t设置为内置类型的时候,将会出现链接错误,需要 ...