[2019HDU多校第一场][HDU 6578][A. Blank]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6578
题目大意:长度为\(n\)的数组要求分别填入\(\{0,1,2,3\}\)四个数中的任意一个,有\(m\)个限制条件:区间\([l,r]\)中出现的数字种数恰好为\(x\),求方案数
题解:f[i][j][k][cur]表示四个数最后出现的位置经过排序后为\(i,j,k,cur\)的方案数,暴力转移即可,其中最后一维需要滚动数组节省空间
对于限制条件可以用vector存下来,每次循环对右端点为当前点的限制条件进行判断即可
虽然要套四个\(for\),但是由于有顺序限制,所以执行次数大约为\(\frac{n^4}{24}\),加上本题的运算简单,常数较小,因此基本不会出现TLE的情况
但是还是要吐槽一句出题人把这场比赛的时间设的好死啊...开个3s应该也不至于放假算法过吧orz
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define N 101 4 #define mp make_pair 5 #define MOD 998244353 6 int T,n,m,l,r,x,f[N][N][N][2],ans; 7 vector<pair<int,int>>d[N]; 8 void init() 9 { 10 ans=0; 11 scanf("%d%d",&n,&m); 12 for(int i=1;i<=n;i++) 13 { 14 d[i].clear(); 15 d[i].push_back(mp(i,1)); 16 } 17 for(int i=1;i<=m;i++) 18 { 19 scanf("%d%d%d",&l,&r,&x); 20 d[r].push_back(mp(l,x)); 21 } 22 memset(f,0,sizeof(f)); 23 f[0][0][0][0]=1; 24 for(int cur=1;cur<=n;cur++) 25 { 26 int o=cur&1; 27 for(int i=0;i<=cur;i++) 28 for(int j=i;j<=cur;j++) 29 for(int k=j;k<=cur;k++) 30 f[i][j][k][o]=0; 31 for(int i=0;i<=cur;i++) 32 for(int j=i;j<=cur;j++) 33 for(int k=j;k<=cur;k++) 34 { 35 (f[j][k][cur-1][o]+=f[i][j][k][o^1])%=MOD; 36 (f[i][k][cur-1][o]+=f[i][j][k][o^1])%=MOD; 37 (f[i][j][cur-1][o]+=f[i][j][k][o^1])%=MOD; 38 (f[i][j][k][o]+=f[i][j][k][o^1])%=MOD; 39 } 40 for(int i=0;i<=cur;i++) 41 for(int j=i;j<=cur;j++) 42 for(int k=j;k<=cur;k++) 43 for(auto pi:d[cur]) 44 { 45 l=pi.first,r=cur,x=pi.second; 46 if((i>=l)+(j>=l)+(k>=l)+(cur>=l)!=x) 47 f[i][j][k][o]=0; 48 } 49 } 50 for(int i=0;i<=n;i++) 51 for(int j=i;j<=n;j++) 52 for(int k=j;k<=n;k++) 53 (ans+=f[i][j][k][n&1])%=MOD; 54 printf("%d\n",ans); 55 } 56 int main() 57 { 58 scanf("%d",&T); 59 while(T--)init(); 60 }
View Code
代码中对vector的初始化其实是没必要额外push_back的,写的时候为了保险就加上去了(虽然差点导致TLE)
这竟然是我博客里的第一道纯DP题...?
转载于:https://www.cnblogs.com/DeaphetS/p/11229389.html
[2019HDU多校第一场][HDU 6578][A. Blank]相关推荐
- [2019HDU多校第一场][HDU 6590][M. Code]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6590 题目大意(来自队友):二维平面上有\(n\)个点,每个点要么是黑色要么是白色,问能否找到一条直线 ...
- 2019HDU多校第一场1001 BLANK (DP)(HDU6578)
2019HDU多校第一场1001 BLANK (DP) 题意:构造一个长度为n(n<=10)的序列,其中的值域为{0,1,2,3}存在m个限制条件,表示为 l r x意义为[L,R]区间里最多能 ...
- 2019HDU多校第一场 HDU6578 Blank
http://acm.hdu.edu.cn/showproblem.php?pid=6578 题意:一排有N个空格.空格从左到右依次为1.2.-.N. 汤姆正在用{0,1,2,3}中的一个数字填充每个 ...
- 2019杭电多校第一场 HDU 6599
题解 枚举所有的回文串 注意,本质不同的回文串最多只有∣S∣|S|∣S∣个 在这些回文串中,有一些是满足要求的,我们对这些串打上标记 首先跑一个ManacherManacherManacher,然后枚 ...
- 2019hdu多校第一场H Desert [多项式计数] [仙人掌计数]
首先注意到n个点的仙人掌其实和n个圆点的圆方树是等价的,那么转化为求圆方树的统计会简单一点. 圆方树要满足的性质有以下几条: 1.奇数层为圆点,偶数层为方点,即只存在圆点和方点连的边. 2.圆点下的子 ...
- 2019牛客多校第一场
2019牛客多校第一场 题号 题目 知识点 A Monotonic Matrix B Symmetric Matrix C Fluorescent 2 D Two Graphs E Removal F ...
- 2019年杭电多校第一场 1001题blank(DP)HDU6578
2019年杭电多校第一场 1001题blank(DP)HDU6578 解决思路,开一个DP数组来存储0 1 2 3四个字符最后出现的位置,并且在DP中已经==排好序==. DP开四维,DP[i][j] ...
- python字符串去重及排序 牛客_2018牛客多校第一场 D.Two Graphs
题意: n个点,m1条边的图E1,n个点,m2条边的图E2.求图E2有多少子图跟图E1同构. 题解: 用STL的全排列函数next_permutation()枚举映射.对于每一种映射枚举每一条边判断合 ...
- 2020 牛客多校第一场
2020 牛客多校第一场 A. B-Suffix Array 后缀数组的思想:倍增+桶排序的方式找出一串连续序列后缀的大小.虽说正常使用的时候都是字典序,但是只要修改排序方式,也能够达到一个类似的&q ...
最新文章
- Ansible自动化运维基础-------ploybook
- 数据脱敏的 6 种方案
- C语言将两个数字相加,然后将和作为链接列表返回(附完整源码)
- CodeForces - 1323B Count Subrectangles(思维)
- 判断sem信号量为零_Linux线程同步(互斥量、信号量、条件变量、生产消费者模型)...
- linux oracle流复制,oracle 流复制
- python3 装饰器_python3_装饰器_异常处理
- firefox扩展开发(八) :控件激活
- 如何深入的学习好CSS?
- 多表查询过滤重复数据_数据分析工具SQL—多表查询
- 新手php环境一键安装包,PHP运行环境一键安装包(phpStudy2013)
- H5+CSS 实现前面带搜索图标的搜索框
- 电音制作收割者宿主软件-Cockos REAPER v6.15 x86 x64 WiN
- SecureCRT无法键盘输入,无法回车
- Python个人快速入门学习(九)jieba库的使用
- PHP微信固码免签系统源码+带监控APP和教程
- 几行代码爬取喜马拉雅音乐
- 设计模式第10式:状态模式
- 网站快速排名百度首页搜索前十名
- 国家测绘局公布2007年十大测绘违法典型案件(转)
热门文章
- 百度贴吧五年内流失九成用户;罗永浩吐槽苹果新品:更丑更贵更胡来;进互联网大厂毕业生5年后7成人离开 | EA周报...
- 一键调用API,聚合数据API服务助力企业应用创新
- KJ分析法(亲和图)的应用实例及知识分享
- 第5章 LinearR/PLR/SVR/KNN/DTR/RFR(测算房价)
- 余弦s=Acos(wt+φ)
- PP实施经验分享(9)——SAP中Day’s supplyReceipt day’s supply及相关报表(可当物料短缺报表使用)
- 天津大学计算机专硕_天津大学计算机技术专硕考研参考书
- Tensorflow2 图像分类-Flowers数据及分类代码详解
- 360应用宝上架流程及所需材料
- Swin-Transformer网络结构详解