[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应用点击响应慢!我开始不以为然,于是拿着网页版的试了试,好像确实有一定延迟,于是开始了研究,最后选择了 ...
随机推荐
- 记录 mysql sql limit 0,100问题
某个场景分页查询出第一页的数据,, limit 0,100 第一页 limit 100,100 第二页 limit 200,100 第三页 select * from user limit 0,10 ...
- Dynamics CRM Microsoft SQL Server 指定的数据库具有更高的版本号
在做NLB部署时遇到这么个问题,CRMAPP1安装的CRM版本号是6.1已经打了SP1补丁,而在CRMAPP2上的CRM安装包是6.0版本号.在选择连接现有部署后,最后一步检測就出了问题,例如以下图所 ...
- phonegap运行原理
用phonegap(现在名为cordova)来开发手机应用,给人的感觉,就是写了一些HTML5的网页,加上javascript,打包安装在手机上,然后就可以运行了,并且还能访问手机的各种功能和硬件,太 ...
- 通过scp批量推送文件到远程目录
[root@openfire1 script]# cat test.sh #!/bin/bash #通过scp推送文件到远程目录 for ip in `cat iplist` do ...
- oc67--NSString1
// // main.m // NSString基本概念 // Foundation框架,苹果有80多个框架,Foundation有125个头文件. #import <Foundation/Fo ...
- What is an ISAPI Extension?
https://www.codeproject.com/Articles/1432/What-is-an-ISAPI-Extension Introduction Unless you have be ...
- stm32I/O的8种工作模式
转载自原子的论坛: 浮空,顾名思义就是浮在空中,上面用绳子一拉就上去了,下面用绳子一拉就沉下去了. 开漏,就等于输出口接了个NPN三极管,并且只接了e,b. c极 是开路的,你可以接一个电阻到3.3V ...
- 特征变化--->标签到索引的转换(StringIndexer)
package Spark_MLlib import org.apache.spark.ml.feature.StringIndexer import org.apache.spark.sql.Spa ...
- 【转载】HashMap实现原理浅析
HashMap和Hashtable的区别 两者最主要的区别在于Hashtable是线程安全,而HashMap则非线程安全Hashtable的实现方法里面都添加了synchronized关键字来确保线程 ...
- 使用psutil模块获取电脑运行信息
psutil是python的一个用于获取cpu信息的模块,非常好使,以下附上官方的一些example: CPU-> Examples >>> import psutil > ...