[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
#include<bits/stdc++.h>
using namespace std;
#define N 101
#define mp make_pair
#define MOD 998244353
int T,n,m,l,r,x,f[N][N][N][],ans;
vector<pair<int,int>>d[N];
void init()
{
ans=;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
{
d[i].clear();
d[i].push_back(mp(i,));
}
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&l,&r,&x);
d[r].push_back(mp(l,x));
}
memset(f,,sizeof(f));
f[][][][]=;
for(int cur=;cur<=n;cur++)
{
int o=cur&;
for(int i=;i<=cur;i++)
for(int j=i;j<=cur;j++)
for(int k=j;k<=cur;k++)
f[i][j][k][o]=;
for(int i=;i<=cur;i++)
for(int j=i;j<=cur;j++)
for(int k=j;k<=cur;k++)
{
(f[j][k][cur-][o]+=f[i][j][k][o^])%=MOD;
(f[i][k][cur-][o]+=f[i][j][k][o^])%=MOD;
(f[i][j][cur-][o]+=f[i][j][k][o^])%=MOD;
(f[i][j][k][o]+=f[i][j][k][o^])%=MOD;
}
for(int i=;i<=cur;i++)
for(int j=i;j<=cur;j++)
for(int k=j;k<=cur;k++)
for(auto pi:d[cur])
{
l=pi.first,r=cur,x=pi.second;
if((i>=l)+(j>=l)+(k>=l)+(cur>=l)!=x)
f[i][j][k][o]=;
}
}
for(int i=;i<=n;i++)
for(int j=i;j<=n;j++)
for(int k=j;k<=n;k++)
(ans+=f[i][j][k][n&])%=MOD;
printf("%d\n",ans);
}
int main()
{
scanf("%d",&T);
while(T--)init();
}
代码中对vector的初始化其实是没必要额外push_back的,写的时候为了保险就加上去了(虽然差点导致TLE)
这竟然是我博客里的第一道纯DP题...?
[2019HDU多校第一场][HDU 6578][A. Blank]的更多相关文章
- [2019HDU多校第一场][HDU 6580][C. Milk]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6580 题目大意:\(n\times m\)大小的方格上有\(k\)瓶水,喝完每瓶水都需要一定的时间.初 ...
- [2019HDU多校第一场][HDU 6584][G. Meteor]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6584 题目大意:求所有满足\(0<\frac{p}{q}\leq1, gcd(p,q)=1,p\ ...
- [2019HDU多校第一场][HDU 6590][M. Code]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6590 题目大意(来自队友):二维平面上有\(n\)个点,每个点要么是黑色要么是白色,问能否找到一条直线 ...
- [2019HDU多校第一场][HDU 6588][K. Function]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6588 题目大意:求\(\sum_{i=1}^{n}gcd(\left \lfloor \sqrt[3] ...
- 2019HDU多校第一场1001 BLANK (DP)(HDU6578)
2019HDU多校第一场1001 BLANK (DP) 题意:构造一个长度为n(n<=10)的序列,其中的值域为{0,1,2,3}存在m个限制条件,表示为 l r x意义为[L,R]区间里最多能 ...
- [2019HDU多校第二场][HDU 6591][A. Another Chess Problem]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6591 题目大意:二维坐标系上,所有满足\(5|2x+y\)的点都被设为障碍物,无法通过.现给出一对点, ...
- 2019HDU多校第一场 BLANK DP
题意:有四种数字,现在有若干个限制条件:每个区间中不同的数字种类必须是多少种,问合法的方案数. 思路: 定义 dp[i][j][k][t] 代表填完前 t 个位置后,{0,1,2,3} 这 4 个数字 ...
- 2019HDU多校第一场 String 贪心
题意:给你一个字符串,问是否存在一个长度为m的子序列,子序列中对应字符的数目必须在一个范围内,问是否存在这样的字符串?如果存在,输出字典序最小的那个. 思路:贪心,先构造一个序列自动机,序列自动机指向 ...
- 2019HDU多校第一场 6582 Path 【最短路+最大流最小割】
一.题目 Path 二.分析 首先肯定要求最短路,然后如何确定所有的最短路其实有多种方法. 1 根据最短路,那么最短路上的边肯定是可以满足$dist[from] + e.cost = dist[to] ...
随机推荐
- 澎湃新闻速览版UWP 隐私策略
ThePaper UWP 此为 澎湃新闻速览版 的隐私策略,本隐私策略内容会不定期更新,以最新内容为主. 若您已经阅读并了解以下内容后,并继续使用该软件,即表示您已同意该协议. 内容: 这是澎湃新闻的 ...
- 数组工具类 Arrays
public static String toString(数组),将参数数组变成字符串,用来实现数组常见的操作 public static void sort(数组),按照批人升序对数组的元素进行 ...
- 如何配置虚拟机的ip地址以及如何使用XShell和WinSCP工具
参考资料:https://blog.csdn.net/phy1997/article/details/78928796
- 题解 CF546C 【Soldier and Cards】
思路 是一道水题,可以用队列+模拟来写,注意不要拿完队列中的元素! 代码 #include<iostream> #include<cstdio> #include<que ...
- dedecms发布文章时间显示多少分钟前
/**文章发布多少时间前*/function tranTime($time) { $rtime = date("m-d H:i",$time); $htime = date(&qu ...
- RabbitMQ快速开始
①:安装rabbitmq所需要的依赖包 yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make g ...
- SqlServer2008 R2发布订阅
网上好多大神写的贴子,自己也看着贴子弄的,写的已经很详细了,我就不重复写了,贴上参考资料: http://www.cnblogs.com/dudu/archive/2010/08/26/1808540 ...
- 二元变量图形的pandas方法
数据加载: 1.散点图 上图使用下采样的方法选取了100个样本点,因为把所有的数据加载进来太多了. 2.Hexplot图 上图是一个散点图再加上热力标注的形式,可以更准确的帮助我们看出数据集中在哪些区 ...
- 微信小程序登录获取手机号
一,发送请求携带 code 到后台换取 openid var that = this; wx.login({ success(res) { console.log(res); var code = r ...
- VUE【三、指令】
模板指令 1.数据渲染(对应data数据) {{a}} 当使用v-once指令时,数据会一次绑定,后续修改值不会变化 v-text="a" 等同于{{a}} v-html=&quo ...