[HDU5807] Keep In Touch
\(Keep\ In\ Touch\):保持联络
\(Informatik\ verbindet\ dich\ und\ mich.\) 信息将你我连结?
发现这个方程很容易列出来。
\(f[i][j][k]=f[l][m][n]\)
但是这个方程状态是\(n^3\)的,转移是\(n^3\)的,时间复杂度是\(O(n^6)\)的不够优秀。
发现可以牺牲一些空间。
\(f[i][j][k][p]\)表示第一个人在\(i\),第二个人在\(j\),第三个人在\(k\),现在轮到第\(p\)个人走了。
发现这样的话转移是\(n\)的,状态是\(n^3\)的,这样的话就复杂度降到了\(n^4\),就稳了。。。
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
const int N=55,mod=998244353;
int T,f[N][N][N][3],w[N],K,Q,g[N][N],a,b,c,n,m;
bool pd(int x,int y) {return abs(w[x]-w[y])<=K;}
bool ck(int x,int y,int z) {
return pd(x,y)&&pd(y,z)&&pd(x,z);
}
int dfs(int x,int y,int z,int r) {
int &tp=f[x][y][z][r];
if(tp!=-1) return tp;
tp=0;
if(r==1&&ck(x,y,z)) tp=1;
for(int i=1;i<=n;i++) {
if(r==1&&g[x][i]) tp=(tp+dfs(i,y,z,2))%mod;
else if(r==2&&g[y][i]) tp=(tp+dfs(x,i,z,3))%mod;
else if(r==3&&g[z][i]&&ck(x,y,i)) tp=(tp+dfs(x,y,i,1))%mod;
}
return tp;
}
int main() {
scanf("%d",&T);
while(T--) {
memset(f,-1,sizeof f);
scanf("%d%d%d%d",&n,&m,&K,&Q);
memset(g,0,sizeof g);
for(int i=1;i<=n;i++) scanf("%d",&w[i]);
for(int i=1,x,y;i<=m;i++) scanf("%d%d",&x,&y),g[x][y]=1;
while(Q--) scanf("%d%d%d",&a,&b,&c),printf("%d\n",dfs(a,b,c,1));
}
return 0;
}
[HDU5807] Keep In Touch的更多相关文章
- HDU5807 Keep In Touch DP
// HDU5807 Keep In Touch DP // 思路:直接暴力是O(n^6).所以要优化一下 // dp[i][j][k][0]:当前点i j k的方案数 // dp[i][j][k][ ...
- HDU5807 Keep In Touch (BestCoder Round #86 D ) 分布式dp
#include <cstdio> #include <cstring> #include <cmath> #include <vector> #inc ...
- [HDU5807] [BestCoder Round #86 1004] Keep In Touch (DP)
[HDU5807] [BestCoder Round #86 1004] Keep In Touch (DP) 题面 有三个人从一张N个点无重边的有向无环图上的三个点出发,每单位时间,他们分别选择当前 ...
- mkdir,rmdir,cp,rm,mv,cat,touch用法
一.mkdir新建目录 1.进入tmp目录,查看该目录下面的子目录 [root@localhost ~]# cd /tmp[root@localhost tmp]# lshsperfdata_root ...
- UC浏览器中touch事件的异常记录
以前也在UC上面栽过几个坑,不过都是页面显示方面的.上个周的时候,商品详情页重做,要添加个上拉显示详情的效果. 有两个条件需要判断: 1.是否到达底部: 2.到达底部之后拖动的y轴距离. 效果写完后, ...
- 移动端web开发,click touch tap区别
转自: http://blog.csdn.net/sly94/article/details/51701188 移动端用tap时会有穿透问题 一:click与tap比较 click与tap都会触发点击 ...
- 手机端html5触屏事件(touch事件)
touchstart:触摸开始的时候触发 touchmove:手指在屏幕上滑动的时候触发 touchend:触摸结束的时候触发 而每个触摸事件都包括了三个触摸列表,每个列表里包含了对应的一系列触摸点( ...
- 移动端开发概览【webview和touch事件】
作为一个前端,而且作为一个做移动端开发的前端,那意味着你要有三头六臂,跟iOS开发哥哥一起打酱油,跟Android开发哥哥一起修bug... Android vs Ios 我在webkit内核的chr ...
- 手持设备点击响应速度,鼠标事件与touch事件的那些事
前言 现在一直在做移动端的开发,这次将单页应用的网页内嵌入了app,于是老大反映了一个问题:app应用点击响应慢!我开始不以为然,于是拿着网页版的试了试,好像确实有一定延迟,于是开始了研究,最后选择了 ...
随机推荐
- Ubuntu中取消秘钥环
1.打开应用程序->附件->password和加密密钥(或者在终端中输入 seahorse) 2.切换到password选项卡,会看到一个password密钥环 3.右击->更改pa ...
- splay专题复习——bzoj 3224 & 1862 & 1503 题解
[前言]快要省选二试了.上次去被虐出翔了~~这次即便是打酱油.也要打出风採!于是暂停新东西的学习.然后開始复习曾经的知识,为骗分做准备.PS:区间翻转的临时跳过,就算学了也来不及巩固了. [BZOJ3 ...
- 《转》OpenStack对象存储——Swift
OpenStack Object Storage(Swift)是OpenStack开源云计算项目的子项目之中的一个.被称为对象存储.提供了强大的扩展性.冗余和持久性.本文将从架构.原理和实践等几方面讲 ...
- 20170623_oracle备份和恢复_常见问题
1 为什么需要备份?备份分类? 1)故障.迁移.误操作 2)备份分类: 物理与逻辑角度:物理备份.逻辑备份 备份策略角度:完全备份.增量备份.差异备份 2 使用导入导出进行备份和恢复及其四种模式:其他 ...
- GammaRay观察Qt程序的运行状况
GammaRay是KDAB开发的Qt应用程序的软件内省工具.利用QObject内省机制,它允许您在运行时观察和操作应用程序.这既可以在工作站本地使用,也可以在嵌入式目标上远程使用. 通过扩充指令级调试 ...
- Linux ALSA声卡驱动之六:ASoC架构中的Machine
前面一节的内容我们提到,ASoC被分为Machine.Platform和Codec三大部分,其中的Machine驱动负责Platform和Codec之间的耦合以及部分和设备或板子特定的代码,再次引用上 ...
- 【Codeforces 670C】 Cinema
[题目链接] http://codeforces.com/contest/670/problem/C [算法] 离散化 [代码] #include<bits/stdc++.h> using ...
- 【POJ 1958】 Strange Towers of Hanoi
[题目链接] http://poj.org/problem?id=1958 [算法] 先考虑三个塔的情况,g[i]表示在三塔情况下的移动步数,则g[i] = g[i-1] * 2 + 1 再考虑四个塔 ...
- Mobile
模块===包 传统开发:整个网页我们写了一个js文件,所有的特效都写在里面了. 缺点:耦合度太高,代码关联性太强,不便于后期维护,会造成全局污染. 发生的请求次数过多,依赖模糊,难于维护. 以上都 ...
- Akka源码分析-Remote-Creating Actors Remotely
在akka官网中关于远程actor交互,介绍了两种方法,一种是通过actorSelection查询,另一种是通过actorOf在远程节点创建一个actor.actorSelection我们之前的博客中 ...