要点

  • 题意:两个数据传输数列,每个数列里有若干个数据包并给出发出时间\(t\),每个数据包到达的时间\(T\)是\(t <= T < t + D\),问有多少种到达序列。
  • 将题目转化为第二个数列插入第一个数列。用第一个数列将时间点划分为\(N+1\)个部分,对于第二数列的每个数据包,预处理它左右范围,即这\(N+1\)个空,它可以插入哪些空。
  • \(i\)为第二个数列的第\(i\)个,\(j\)为第一个数列的\(j-1\)和\(j\)的中间空,\(dp[i][j]\)表示把\(i\)插到\(j\)空里的方案数,转移即是保证\(i-1\)在\(i\)的前面某一空即可。
#include <cstdio>
#include <vector>
using std::vector; typedef long long ll;
const int maxn = 5e4 + 5;
const int mod = 1e9 + 9;
int T, N, M, D;
int a[maxn], b[maxn];
ll dp[maxn][205];
vector<int> v[maxn]; int main() {
scanf("%d", &T);
for (int kase = 1; kase <= T; kase++) {
scanf("%d %d %d", &N, &M, &D);
for (int i = 1; i <= N; i++)
scanf("%d", &a[i]);
for (int i = 1; i <= M; i++)
scanf("%d", &b[i]); for (int p = 1, i = 1; i <= M; i++) {
v[i].clear();
for (; p <= N && a[p] + D <= b[i]; p++);
for (; p <= N && b[i] + D > a[p]; p++)
v[i].push_back(p);
v[i].push_back(p), p = v[i][0];//p:1~n+1
} for (int j = 0; j < v[1].size(); j++)
dp[1][j] = 1;
for (int i = 2; i <= M; i++) {
int p = 0;
ll sum = 0LL;
for (int j = 0; j < v[i].size(); j++) {
for (; p < v[i - 1].size() && v[i - 1][p] <= v[i][j]; p++)
sum = (sum + dp[i - 1][p]) % mod;
dp[i][j] = sum;
}
} ll ans = 0LL;
for (int j = 0; j < v[M].size(); j++)
ans = (ans + dp[M][j]) % mod;
printf("Case #%d: %lld\n", kase, ans);
}
return 0;
}

UVaLive6435(dp)的更多相关文章

  1. LightOJ 1033 Generating Palindromes(dp)

    LightOJ 1033  Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...

  2. lightOJ 1047 Neighbor House (DP)

    lightOJ 1047   Neighbor House (DP) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730# ...

  3. UVA11125 - Arrange Some Marbles(dp)

    UVA11125 - Arrange Some Marbles(dp) option=com_onlinejudge&Itemid=8&category=24&page=sho ...

  4. 【POJ 3071】 Football(DP)

    [POJ 3071] Football(DP) Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4350   Accepted ...

  5. 初探动态规划(DP)

    学习qzz的命名,来写一篇关于动态规划(dp)的入门博客. 动态规划应该算是一个入门oier的坑,动态规划的抽象即神奇之处,让很多萌新 萌比. 写这篇博客的目标,就是想要用一些容易理解的方式,讲解入门 ...

  6. Tour(dp)

    Tour(dp) 给定平面上n(n<=1000)个点的坐标(按照x递增的顺序),各点x坐标不同,且均为正整数.请设计一条路线,从最左边的点出发,走到最右边的点后再返回,要求除了最左点和最右点之外 ...

  7. 2017百度之星资格赛 1003:度度熊与邪恶大魔王(DP)

    .navbar-nav > li.active > a { background-image: none; background-color: #058; } .navbar-invers ...

  8. Leetcode之动态规划(DP)专题-详解983. 最低票价(Minimum Cost For Tickets)

    Leetcode之动态规划(DP)专题-983. 最低票价(Minimum Cost For Tickets) 在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行.在接下来的一年里,你要旅行的 ...

  9. 最长公共子序列长度(dp)

    /// 求两个字符串的最大公共子序列长度,最长公共子序列则并不要求连续,但要求前后顺序(dp) #include <bits/stdc++.h> using namespace std; ...

随机推荐

  1. listen 60

    Barbie Exposure May Limit Girls' Career Imagination The ubiquitous Barbie doll: she's been everythin ...

  2. linux命令学习笔记(23):Linux 目录结构

    对于每一个Linux学习者来说,了解Linux文件系统的目录结构,是学好Linux的至关重要的一步.,深入了解linux文件 目录结构的标准和每个目录的详细功能,对于我们用好linux系统只管重要,下 ...

  3. CodeForces-329C(div1):Graph Reconstruction(随机&构造)

    I have an undirected graph consisting of n nodes, numbered 1 through n. Each node has at most two in ...

  4. kubectl工具管理应用生命周期

    ######kubectl管理工具###### [root@k8s-master dashboard]# kubectl get pod NAME READY STATUS RESTARTS AGE ...

  5. AtCoder Beginner Contest 102

    A - Multiple of 2 and N Time Limit: 2 sec / Memory Limit: 1024 MB Score : 100100 points Problem Stat ...

  6. poj1475 Pushing Boxes[双重BFS(毒瘤搜索题)]

    地址. 很重要的搜索题.★★★ 吐槽:算是写过的一道码量比较大的搜索题了,细节多,还比较毒瘤.虽然是一遍AC的,其实我提前偷了大数据,但是思路还是想了好长时间,照理说想了半小时出不来,我就会翻题解,但 ...

  7. phantomjs学习

    PhantomJS快速入门 本文简要介绍了PhantomJS的相关基础知识点,主要包括PhantomJS的介绍.下载与安装.HelloWorld程序.核心模块介绍等.由于鄙人才疏学浅,难免有疏漏之处, ...

  8. 洛谷P1525关押罪犯——二分做法

    题目:https://www.luogu.org/problemnew/show/P1525 二分答案,二分图染色判断是否可行. 代码如下: #include<iostream> #inc ...

  9. .Net 学习资源整理

    01.Visual Studio 隐藏的财富 --- C# 语言规范 安装完Visual Studio之后,我们好像忽略了,微软给我们准备的<C# 语言规范>. 路径参考下图: 02.MS ...

  10. 转学习LINUX的建议

    作为一个新人,怎样学习嵌入式Linux?被问过太多次,特写这篇文章来回答一下.在学习嵌入式Linux之前,肯定要有C语言基础.汇编基础有没有无所谓(就那么几条汇编指令,用到了一看就会).C语言要学到什 ...