这是紫书上的第一个dp哈。

1.状态定义:dp[i][j]---->到时刻i的时候(出发的时候时刻为0,约定时间为时刻time),从j号车站开往N号车站,在车站等待的最少的时间。

2.这个人当前的策略:

α.在车站等待一个单位的时间(该站此时没有发车时应该这么做)

β.坐上开往左边的火车

γ.坐上开往右边的火车

3.状态转移方程:dp[i][j] = min(dp[i+1][j]+1,dp[i+t[j]][j+1],dp[i+t[j-1]][j-1])

我们可以做一个乘车时刻表来记录i时刻j车站是否有车经过。

dp[time][N] = 0,其余初始化为正无穷。

同时,可以看出,时刻i一直在往大的方向转移,所以,i的循环应该是逆序。

还有,按道理来说这个人不一定只在该车站仅仅等待1个单位时间,应该可以等待k个,然而在更新dp[i+1][j]时(由于是逆序循环,所以dp[i+1][j]先被考虑)也考虑了等待的问题,所以只需要考虑当前时刻的这1单位时刻等待与否,之前的k-1个单位时刻其实已经考虑过了。

贴AC代码:

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#define maxn1 55
#define maxn2 255
#define F 0x3f
#define INF 0x3f3f3f3f
using namespace std;
int timetable[][maxn2][maxn1];
int t[maxn1],dp[maxn2][maxn1];
int main()
{
int N,cas = ;
while(scanf("%d",&N) == && N){
int time;
scanf("%d",&time);
for(int i = ;i < N;++i) scanf("%d",&t[i]);
memset(timetable,,sizeof(timetable));
memset(dp,F,sizeof(dp));
int M1,M2,train;
scanf("%d",&M1);
for(int i = ;i < M1;++i){
scanf("%d",&train);
int sum = train;
for(int j = ,k = ;j < N && k <= N;sum += t[j],++j,++k){
if(sum > time) break;
timetable[][sum][k] = ;
}
}
scanf("%d",&M2);
for(int i = ;i < M2;++i){
scanf("%d",&train);
int sum = train;
for(int j = N - ,k = N;j >= && k >= ;sum += t[j],--j,--k){
if(sum > time) break;
timetable[][sum][k] = ;
}
}
dp[time][N] = ;
for(int i = time - ;i >= ;--i){
for(int j = ;j <= N;++j){
dp[i][j] = dp[i + ][j] + ;
if(timetable[][i][j] && j < N && i + t[j] <= time)
dp[i][j] = min(dp[i][j],dp[i + t[j]][j + ]);
if(timetable[][i][j] && j > && i + t[j - ] <= time)
dp[i][j] = min(dp[i][j],dp[i + t[j - ]][j - ]);
}
}
if(dp[][] >= INF) printf("Case Number %d: impossible\n",cas++);
else printf("Case Number %d: %d\n",cas++,dp[][]);
}
return ;
}

UVa1025 (DAG上的dp)的更多相关文章

  1. UVA - 10131Is Bigger Smarter?(DAG上的DP)

    题目:UVA - 10131Is Bigger Smarter? (DAG) 题目大意:给出一群大象的体重和IQ.要求挑选最多的大象,组成一个序列.严格的体重递增,IQ递减的序列.输出最多的大象数目和 ...

  2. BZOJ 3998 TJOI2015 弦论 后缀自动机+DAG上的dp

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3998 题意概述:对于一个给定长度为N的字符串,求它的第K小子串是什么,T为0则表示不同位置 ...

  3. NYOJ16 矩形嵌套 【DAG上的DP/LIS】

    矩形嵌套 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c ...

  4. DAG上的DP

    引例:NYOJ16 矩形嵌套 时间限制:3000 ms  |           内存限制:65535 KB 难度:4   描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可 ...

  5. UVA 10917 Walk Through the Forest(dijkstra+DAG上的dp)

    用新模板阿姨了一天,换成原来的一遍就ac了= = 题意很重要..最关键的一句话是说:若走A->B这条边,必然是d[B]<d[A],d[]数组保存的是各点到终点的最短路. 所以先做dij,由 ...

  6. BZOJ 4011 HNOI2015 落忆枫音 DAG上的dp(实际上重点在于分析)

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4011 题意概述:给出一张N点的DAG(从1可以到达所有的点),点1的入度为0.现在加一条原 ...

  7. UVA 11324 The Largest Clique(缩点+DAG上的dp)

    求最大团.和等价性证明有类似之处,只不过这个不是求互推,而是只要a->b,或b->a即可. 同样的,容易想到先缩点,得到DAG,每个节点上保存SCC的点数,相信任意一条由根节点(入度为零) ...

  8. Codeforces 919D Substring ( 拓扑排序 && DAG上的DP )

    题意 : 给出含有 N 个点 M 条边的图(可能不连通或者包含环),每个点都标有一个小写字母编号,然后问你有没有一条路径使得路径上重复字母个数最多的次数是多少次,例如图上有条路径的顶点标号顺序是  a ...

  9. (板子)缩点 + DAG上的DP(深搜)luogu P3387

    板子传送门 根据题目意思,我们只需要找出一条点权最大的路径就行了,不限制点的个数.那么考虑对于一个环上的点被选择了,一整条环是不是应该都被选择,这一定很优,能选干嘛不选.很关键的是题目还允许我们重复经 ...

随机推荐

  1. maven的web项目手工发布

    网上有很多人都认为maven的web项目发布时,要用这个命令那个命令,太麻烦了,用纯手工打造发布更为方便. 第一步,导出你所在项目maven的依赖包. 打开cmd窗口执行命令:mvn dependen ...

  2. vue项目目录介绍

    Vue项目目录 初始化项目 vue init webpack []projectname] cd [projectname] npm install vue run dev 目录树 +---build ...

  3. get方式提交中文乱码(两次编码,一次解码)

    1.编码XMLHttpRequest //建立连接 xmlhttp.open("get","${pageContext.request.contextPath}/serv ...

  4. 使用HttpClient进行Get方式通信

    下载apache包 http://hc.apache.org/downloads.cgi 比较eclipse自带api,简单,易上手 实例: package zw1; import java.io.I ...

  5. C字符串输入输出函数

    下面就几个常用的字符串输入输出函数做个小小的总结TAT 使用时添加头文件:#include<stdio.h>. scanf("格式控制字符串",变量地址列表):(pri ...

  6. DirectFB学习笔记二

    本篇目的,画一个方框,在方框上画一串字符. 实现步骤:首先创建IDirectFB接口,通过它再创建要显示的表面surface,同时创建字体font,绘制字符必须要设置绘制的字体,否则绘制不成功.然后清 ...

  7. Asp.Net 网站一键部署技术(下)

    上一篇我们讲了服务端的配置,现在我们来说说客户端的配置. 0x01: 使用Visual Studio发布向导创建发布配置文件 然后新建配置文件,因为我们的网站可能会发布到多个地方,比如发布一份内网测试 ...

  8. 不完全图解HTTP

    在2D平面上行走的时候,认识只局限于“点”,刚认识一个新的点,就把之前的那个点忘记了,捡了芝麻丢西瓜.只从3D视角俯瞰时,把这些点连接在一起,点成线,线成面时,才能有所顿悟.话不多说,这是我对HTTP ...

  9. SQL Server中关于基数估计如何计算预估行数的一些探讨

    关于SQL Server 2014中的基数估计,官方文档Optimizing Your Query Plans with the SQL Server 2014 Cardinality Estimat ...

  10. [转]ObjectARX二次开发vs编译器版本ARX版本对应说明