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][1]:j在当前时刻,i k还在上次
// dp[i][j][k][2]:j k在当前时刻,i还在上次
// 那么就可以转移了 本题u<v 所以转移的时候从大到小 从后往前 #include <bits/stdc++.h>
using namespace std;
#define clc(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
const int N = ;
const int MOD = ;
#define LL long long
double const pi = acos(-);
void fre() {freopen("in.txt","r",stdin);} int n,m,c,q;
int w[];
int g[][];
int dp[][][][]; int check(int a,int b,int c){
return max(abs(a-b),max(abs(b-c),abs(a-c)));
}
void DP(){
for(int i=n;i>=;i--){
for(int j=n;j>=;j--){
for(int k=n;k>=;k--){
dp[i][j][k][]=,dp[i][j][k][]=dp[i][j][k][]=;
for(int h=i+;h<=n;h++){
if(g[h][i]) dp[i][j][k][]=(dp[i][j][k][]+dp[h][j][k][])%MOD;
}
for(int h=j+;h<=n;h++){
if(g[h][j]) dp[i][j][k][]=(dp[i][h][k][]+dp[i][j][k][])%MOD;
}
for(int h=k+;h<=n;h++){
if(g[h][k]) dp[i][j][k][]=(dp[i][j][h][]+dp[i][j][k][])%MOD;
}
if(check(w[i],w[j],w[k])>c) dp[i][j][k][]=;
}
}
}
} int main(){
int T;
scanf("%d",&T);
while(T--){
scanf("%d%d%d%d",&n,&m,&c,&q);
for(int i=;i<=n;i++) scanf("%d",&w[i]);
clc(g,);
clc(dp,);
for(int i=;i<=m;i++) {
int u,v;
scanf("%d%d",&u,&v);
g[v][u]=;
}
DP();
while(q--){
int u,v,z;
scanf("%d%d%d",&u,&v,&z);
printf("%d\n",dp[u][v][z][]);
}
}
return ;
}
HDU5807 Keep In Touch DP的更多相关文章
- [HDU5807] [BestCoder Round #86 1004] Keep In Touch (DP)
[HDU5807] [BestCoder Round #86 1004] Keep In Touch (DP) 题面 有三个人从一张N个点无重边的有向无环图上的三个点出发,每单位时间,他们分别选择当前 ...
- HDU5807 Keep In Touch (BestCoder Round #86 D ) 分布式dp
#include <cstdio> #include <cstring> #include <cmath> #include <vector> #inc ...
- HDU 5807 Keep In Touch DP
Keep In Touch Problem Description There are n cities numbered with successive integers from 1 to n ...
- [HDU5807] Keep In Touch
\(Keep\ In\ Touch\):保持联络 \(Informatik\ verbindet\ dich\ und\ mich.\) 信息将你我连结? 发现这个方程很容易列出来. \(f[i][j ...
- hdu_5807_Keep In Touch(分段dp)
题目链接:hdu_5807_Keep In Touch 题意: 在Byteland一共有nn个城市,编号依次为11到nn,同时有mm条单向道路连接着这些城市,其中第ii条道路的起点为u_iui, ...
- HDU5807分段dp
DAG图. [题意] n(50)个城市m(c(n,2))条单向边(x,y),保证x<y 对于三个点(x,y,z)如果abs(w[x]-w[y])<=K && abs(w[x ...
- 【Codeforces720D】Slalom 线段树 + 扫描线 (优化DP)
D. Slalom time limit per test:2 seconds memory limit per test:256 megabytes input:standard input out ...
- 浅谈数位DP
在了解数位dp之前,先来看一个问题: 例1.求a~b中不包含49的数的个数. 0 < a.b < 2*10^9 注意到n的数据范围非常大,暴力求解是不可能的,考虑dp,如果直接记录下数字, ...
- Codeforces Testing Round #12 C. Subsequences 树状数组维护DP
C. Subsequences Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/597/probl ...
随机推荐
- C++:成员运算符重载函数和友元运算符重载函数的比较
5.2.4 成员运算符重载函数和友元运算符重载函数的比较 (1)对双目运算符而言,成员运算符重载函数参数表中含有一个参数,而友元运算符重载函数参数表中有两个参数:对于单目运算符而言,成员运算符重载函数 ...
- POJ2891——Strange Way to Express Integers(模线性方程组)
Strange Way to Express Integers DescriptionElina is reading a book written by Rujia Liu, which intro ...
- javascript中===与==
== equality 等同,=== identity 恒等. ==, 两边值类型不同的时候,要先进行类型转换,再比较. ===,不做类型转换,类型不同的一定不等. 类型转换规则:Boolean> ...
- web前端性能测试小点
关于前端性能的文章: http://www.cnblogs.com/fnng/archive/2011/09/19/2181894.html web应用的前端性能响应时间指浏览器的页面加载时间.浏览器 ...
- PHP5.4连接sqlserver
1.下载微软的php连接驱动:SQLSRV30.EXE(5.4对应,后面的native client要用2012)/SQLSRV20.EXE(5.3对应,native client要用2008)/SQ ...
- [HIHO1184]连通性二·边的双连通分量(双连通分量)
题目链接:http://hihocoder.com/problemset/problem/1184 题意裸,写个博客记下输出姿势. /* ━━━━━┒ギリギリ♂ eye! ┓┏┓┏┓┃キリキリ♂ mi ...
- tomcat web.xml 配置
1<web-app> 2<error-page> 3<error-code>404</error-code> 4<location>/Not ...
- lrj计算几何模板
整理了一下大白书上的计算几何模板. #include <cstdio> #include <algorithm> #include <cmath> #include ...
- xcode6.3 编译ffmpeg 2.6.3(已验证编译成功)
1.解压ffmpeg2.6.3源代码,在根目录下新建文件myconfig,内容如下,执行命令chmod 777 ./myconfig 2../myconfig 3.make 4.make instal ...
- error C2471: 无法更新程序数据库 vc90.pdb
error C2471: 无法更新程序数据库“d:/Work/ Project/debug/vc90.pdb” fatal error C1083: 无法打开程序数据库文件:“d:/Work/ Pro ...