状态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 }

View Code

转载于:https://www.cnblogs.com/PYWBKTDA/p/11253923.html

[hdu6578]Blank相关推荐

  1. HDU-6578 Blank

    HDU-6578 Blank 联想(口胡)(可跳过) 限制为几种不一样的数->存每个数最后出现的位置 又是一道神仙DP题.但如果思路正确还是挺简单的. 由于限制是限制一个区间有几个不同的数,所以 ...

  2. 2019多校第一场 HDU6578 - Blank(DP,思维,滚动数组优化空间)

    链接:HDU6578 - Blank 题意: 有 n (≤100) 个格子,向其中填入 0.1.2.3 这4个数,但是有 m (≤100) 个限制 限制 l r x :表示 l ~ r 的格子内不同的 ...

  3. HDU6578——blank 动态规划

    题目来源 HDU 6578 题意 总共有nnn个编号,每个编号可以填充一个数字,分别为{0,1,2,3}\{0,1,2,3\}{0,1,2,3}.有mmm个条件,每个条件组成为l,r,xl,r,xl, ...

  4. 2019HDU多校第一场 HDU6578 Blank

    http://acm.hdu.edu.cn/showproblem.php?pid=6578 题意:一排有N个空格.空格从左到右依次为1.2.-.N. 汤姆正在用{0,1,2,3}中的一个数字填充每个 ...

  5. HDU-6578 Blank(DP)2019暑假杭电多校第一场

    题意:一行有n个空格编号1~n; 每一个空格中填入0,1,2,3中的一个数字.且满足m个限制l,r,x:满足在区间[l,r]正好有x种不同的数字. 有多少种方法可以填充空格以满足所有条件? 思路:dp ...

  6. 2019年杭电多校第一场 1001题blank(DP)HDU6578

    2019年杭电多校第一场 1001题blank(DP)HDU6578 解决思路,开一个DP数组来存储0 1 2 3四个字符最后出现的位置,并且在DP中已经==排好序==. DP开四维,DP[i][j] ...

  7. 2019HDU多校第一场1001 BLANK (DP)(HDU6578)

    2019HDU多校第一场1001 BLANK (DP) 题意:构造一个长度为n(n<=10)的序列,其中的值域为{0,1,2,3}存在m个限制条件,表示为 l r x意义为[L,R]区间里最多能 ...

  8. pandas使用fillna函数将dataframe中缺失值替换为空字符串(replace missing value with blank string in dataframe)

    pandas使用fillna函数将dataframe中缺失值替换为空字符串(replace missing value with blank string in dataframe) 目录 panda ...

  9. Ruby的.nil? .empty? .blank? .present?区别

    .nil? , .empty? .blank? .present?区别: .nil? 和 .empty? 是ruby的方法. .blank? 是rails的方法. .nil? 判断对象是否存在(nil ...

最新文章

  1. 面试官:private修饰的方法可以通过反射访问,那么private的意义是什么?
  2. java模拟数据库压测_java应用的优化【转】
  3. 2020-12-03 Python OpenCV: 图片的裁剪
  4. rt-thread怎么使用数码管_三菱FX PLC功能指令,怎么学?
  5. JAVA基本数据类型所占字节数是多少?
  6. axure树形表格_Axure教程:可增删改的树型结构
  7. 解决visual studio换行(回车键)不能代码补全问题
  8. MyBatis 批量插入与更新、核心配置文件 mybatis-config.xml
  9. mysql插入汉子1366_mysql 向列表中添加漢字錯誤 1366
  10. 微型计算机原理及应用 湖南大学,2015年微机原理及其应用-湖南大学.doc
  11. 暗组2007 专业版 V6.1 800MB超大容量!迅雷 BT下载
  12. 突发!阿里巴巴大调整
  13. 新遇到的问题 , 进程退出代码是 '0xffffffff'
  14. 大一上课设——贪吃蛇(链表 + easyx)
  15. 工作上遇到困难,你该怎样获得他人的支持和帮助?
  16. Mac运行已安装软件提示“XXX 已损坏,打不开。移到废纸篓/推出磁盘映像。”解决方法
  17. 企业微信聊天工具栏怎么开启?如何调整位置?
  18. 字节跳动二号人物——山西人张利东
  19. 腾讯潘安群:腾讯云金融级数据库TDSQL分析
  20. 桑榆之年,你将如何谢幕这一生?

热门文章

  1. word打开文件出错怎么办?
  2. STM32CubeMX学习笔记(44)——USB接口使用(HID按键)
  3. php修改头像怎么做,PHP - 点击更换头像
  4. 小程序为什么要办理ICP许可证
  5. CentOs网络管理:ifconfig家族,iproute家族及配置文件
  6. html ckplayer.swf,让KindEditor支持MP4视频(使用ckplayer播放器)
  7. Glyphs 2 for Mac(字体设计编辑软件)
  8. Kindle的使用体验
  9. Error:(1, 0) Plugin with id 'com.android.application' not found. a href=openFile:F:\AndroidCode\Ji
  10. ubuntu18.04 LORD 3DM-GX5-AHRS + ros驱动安装