POJ - 3846 Mountain Road

题意:n个人要过桥,有的人从左边来,有的人从右边来,给你他们到达桥一端的时间和过桥所需要的时间,要求相向而行的只能有一人,对于每一个点,不能在10s内有同向而行的人经过。

思路:f[i][j][A/B] 表示 从左边走了i个,从右边走了j个,最后一个是左边还是右边的最小时间。问你最后一辆车的到达时间最小是多少。

  对于每一个这样的状态,可以往后面一直推过了k辆反向的车所消耗的时间,只要把出发时间和到达时间的间距都压在10s以上就可以满足条件,不断的更新最优值就行了。

  我之前写的时候对于每一个状态只知道推相邻的状态,这样导致转移的代码特别冗杂,最终答案也没有对,而且还超时了,所以这题来讲还是很遗憾没写出来,想到了状态,只是转移的时候犯了错误,没能过掉。

 #include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#define LL long long
#define INF 0x3f3f3f3f
#define IN freopen("in.txt","r",stdin)
#define OUT freopen("out.txt", "w", stdout)
#define MAXN 100005
using namespace std;
#define A 0
#define B 1
struct Node{
int x, y, pos;
};
int n;
int f[][][];
Node a[], b[];
int a0, b0;
int main()
{
//IN;
//OUT;
int T;
scanf("%d", &T);
while(T--){
scanf("%d\n", &n);
char ch;
int x, y;
a0 = ;
b0 = ;
//scanf("%c", &ch);
for(int i = ; i <= n; i++){
scanf("%c", &ch);
scanf("%d%d\n", &x, &y); if(ch == 'A'){
a0++;
a[a0].x = x;
a[a0].y = y;
a[a0].pos = i;
}
else{
b0++;
b[b0].x = x;
b[b0].y = y;
b[b0].pos = i;
}
}
int i = , j = ;
memset(f, INF, sizeof(f));
f[][][A] = ;
f[][][B] = ;
int s, t;
for(int i = ; i <= a0; i++){
for(int j = ; j <= b0; j++){
t = f[i][j][A] - ;
s = f[i][j][A] - ;
for(int k = j + ; k <= b0; k++){
s = max(s + , b[k].x);
t = max(t + , s + b[k].y);
f[i][k][B] = min(f[i][k][B], t);
}
t = f[i][j][B] - ;
s = f[i][j][B] - ;
for(int k = i + ; k <= a0; k++){
s = max(s + , a[k].x);
t = max(t + , s + a[k].y);
f[k][j][A] = min(f[k][j][A], t);
}
}
}
printf("%d\n", min(f[a0][b0][A], f[a0][b0][B]));
}
return ;
}

POJ - 3846 Mountain Road 动归的更多相关文章

  1. Mountain Road

    题意: n个车,过一条路,有不同的方向,路上不允许同时有两个方向的车,给出每个车的起始时间,方向,和经过路花费的时间,车最小间隔10个时间,求最后一个车通过路的最早的时间. 分析: dp[i][j][ ...

  2. POJ 2110 Mountain Walking 二分+bfs

    传送门 昨天看到这个题还以为是个脑残的dp, 然而脑残的是我. 题目意思就是从左上角走到右下角, 设x为路径上的最大值-最小值, 求x的最小值. 二分x, 对于每一个x, 枚举下界lower, low ...

  3. uva 12222 Mountain Road

    题意: 有一个单行道,两个方向都有车在等待.给出每个车的方向以及到达的时间以及走完这段路所需要的时间. 为了防止车祸,同向两车通过任一点的时间间隔不得小于10s. 求最后一辆车离开时刻的最小值. 思路 ...

  4. POJ 1947 Rebuilding Road(树形DP)

    Description The cows have reconstructed Farmer John's farm, with its N barns (1 <= N <= 150, n ...

  5. 【POJ 3352】 Road Construction

    [题目链接] 点击打开链接 [算法] tarjan算法求边双联通分量 [代码] #include <algorithm> #include <bitset> #include ...

  6. {POJ}{动态规划}{题目列表}

    动态规划与贪心相关: {HDU}{4739}{Zhuge Liang's Mines}{压缩DP} 题意:给定20个点坐标,求最多有多少个不相交(点也不相交)的正方形 思路:背包问题,求出所有的正方形 ...

  7. Soj题目分类

    -----------------------------最优化问题------------------------------------- ----------------------常规动态规划 ...

  8. XML Data Type Methods(一)

    XML Data Type Methods(一) /*XML Data Type Methods: 1.The query('XQuery') method retrieves(vt.检索,重新得到) ...

  9. gRPC 的route_guide例子

      本文的例子代码在: https://github.com/grpc/grpc-go/tree/master/examples/route_guide 功能就类似目前LBS一样,在每个位置上报一些文 ...

随机推荐

  1. Linux bash常用快捷键

    移动光标 ctrl-a 光标移动到行首 ctrl-e 光标移动到行尾 ctrl+xx 在行首和光标位置直接切换 ctrl-b 光标左移一位 ctrl-f 光标右移一位 alt-b 光标左移一词 alt ...

  2. python中的try...except...finally函数

    异常Error 我们在写代码的时候,经常会遇见程序抛出Error无法执行的情况 一般情况下,在Python无法正常处理程序时就会发生一个异常.异常是Python对象,表示一个错误.当Python脚本发 ...

  3. Redit集群搭建-Sentinel模式搭建

    Redit集群搭建 学习了: Windows:http://blog.csdn.net/mrxiagc/article/details/52799081 Linux:https://www.cnblo ...

  4. poj 2337 Catenyms 【欧拉路径】

    题目链接:http://poj.org/problem?id=2337 题意:给定一些单词,假设一个单词的尾字母与还有一个的首字母同样则能够连接.问能否够每一个单词用一次,将全部单词连接,能够则输出字 ...

  5. taglist安装

    注意:taglist依赖于ctags,所以要先装ctags,否则taglist装了也没法用!1.首先安装ctags1)ubuntu安装sudo apt-get install exuberant-ct ...

  6. [COI2007] [luogu P1823] Patrik 音乐会的等待 解题报告 (单调栈)

    题目链接:https://www.luogu.org/problemnew/show/P1823 题目: N个人正在排队进入一个音乐会.人们等得很无聊,于是他们开始转来转去,想在队伍里寻找自己的熟人. ...

  7. 浅谈贝塞尔曲线以及iOS中粘性动画的实现

    关于贝塞尔曲线,网上相关的文章很多,这里我主要想用更简单的方法让大家理解贝塞尔曲线,当然,这仅仅是我个人的理解,如有错误的地方还请大家能够帮忙指出来,这样大家才能一起进步. 贝塞尔曲线,常用到的可分为 ...

  8. SQL_触发器学习

    --触发器学习-------------------------------------------------------------------------------after 触发器----- ...

  9. Mac配置PHP环境

    本文章来自:http://blog.csdn.net/wj_november/article/details/51417491 本人使用的是:MacOs 10.12.3,根据如上操作已经安装成功,感谢 ...

  10. [POI2008]POD-Subdivision of Kingdom(搜索+状压)

    题意 给定一个n个点的无向图,要求将点集分成大小相等的两个子集,使两个子集之间的边数最少 (n<=26) 题解 一开始想了半天DP发现不会,去看题解全是搜索. 所以发现C(1326)可以过我就写 ...