要点

  • 题意:两个数据传输数列,每个数列里有若干个数据包并给出发出时间\(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. RQNOJ 140 分配时间:dp

    题目链接:https://www.rqnoj.cn/problem/140 题意: 小王参加的考试是几门科目的试卷放在一起考,一共给t分钟来做. 他现在已经知道第i门科目花k分钟可以拿到w[i][k] ...

  2. ffmpeg去水印

    1.用potplayer打开有水印的视频文件,截图一张待用.2.用IrfanView打开保存的图片,调整到100%大小,按住鼠标左键框选水印位置,记下标题“Selection:”右边的4组数字.3.f ...

  3. Android sdk 搭建

    下载安装 http://pan.baidu.com/wap/share/home?uk=67915989&third=0 搭建Android环境时,无论使用的Eclipse还是Android ...

  4. 注意!!一定要谨慎使用c/c++原生指针

    使用指针,要非常小心,今天在做一个小游戏时,就碰到一个使用原生指针的问题,找了好几个小时,才定位到问题的所在,晕. 主要是顶层逻辑中引用了一个指针,而在业务逻辑中将此指针删除了.这种在代码量很少的情况 ...

  5. SimpliciTI使用

    SimpliciTI组网过程介绍 1.SimpliciTI支持点对点和星形的网络拓扑结构.   下面介绍以AP为中心的SimpliciTI网路协议的星形拓扑结构通信过程 1)当ED节点上电之后就扫描信 ...

  6. Collection与Map总结

    顺序表和链表统称为线性表:顺序表一般表现为数组,如:ArrayList的实现;链表有单链表.双链表.循环链表的区分,如:LinkedArrayList由双链表+哈希表实现

  7. [poj1741]Tree(点分治+容斥原理)

    题意:求树中点对距离<=k的无序点对个数. 解题关键:树上点分治,这个分治并没有传统分治的合并过程,只是分成各个小问题,并将各个小问题的答案相加即可,也就是每层的复杂度并不在合并的过程,是在每层 ...

  8. C# 移除string[] 数组中的指定元素

    本文转载自  http://www.cnblogs.com/jcdd-4041/p/3279531.html 第一步:先把string[] 转换成 ArrayList   第二步:移除指定元素 第三步 ...

  9. JAVA基础学习-集合三-Map、HashMap,TreeMap与常用API

    森林森 一份耕耘,一份收获 博客园 首页 新随笔 联系 管理 订阅 随笔- 397  文章- 0  评论- 78  JAVA基础学习day16--集合三-Map.HashMap,TreeMap与常用A ...

  10. sqlserver的语句和mysql语句

    感谢原创 sqlserver和mysql基本语句的对比 http://blog.csdn.net/kk185800961/article/details/47044751 sqlserver中常见的语 ...