UVA 1025 A Spy in the Metro DP水题
简单DAG,每个状态有三种决策,原地傻等,上往左开的车,上往右开的车。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <map>
#include <set>
#include <vector>
#include <string>
#include <queue>
#include <deque>
#include <bitset>
#include <list>
#include <cstdlib>
#include <climits>
#include <cmath>
#include <ctime>
#include <algorithm>
#include <stack>
#include <sstream>
#include <numeric>
#include <fstream>
#include <functional>using namespace std;#define MP make_pair
#define PB push_back
typedef long long LL;
typedef unsigned long long ULL;
typedef vector<int> VI;
typedef pair<int,int> pii;
const int INF = INT_MAX / 3;
const double eps = 1e-8;
const LL LINF = 1e17;
const double DINF = 1e60;
const int maxn = 55;
const int maxt = 400;
int f[maxt][maxn], N, T;
int cost[maxn], M1, M2, d1[maxn], d2[maxn];
bool left_bus[maxn][maxt], right_bus[maxn][maxt];int main() {int kase = 1;while(scanf("%d",&N), N) {memset(f,0x3f,sizeof(f));memset(cost,0,sizeof(cost));memset(left_bus,0,sizeof(left_bus));memset(right_bus,0,sizeof(right_bus));int inf = f[0][0];scanf("%d",&T);for(int i = 1;i < N;i++) scanf("%d",&cost[i]);scanf("%d",&M1);for(int i = 1;i <= M1;i++) scanf("%d",&d1[i]);scanf("%d",&M2);for(int i = 1;i <= M2;i++) scanf("%d",&d2[i]);for(int i = 1;i <= M1;i++) {int nowtime = d1[i];for(int j = 1;j <= N;j++) {left_bus[j][nowtime] = true;nowtime += cost[j];}}for(int i = 1;i <= M2;i++) {int nowtime = d2[i];for(int j = N;j >= 1;j--) {right_bus[j][nowtime] = true;nowtime += cost[j - 1];}}f[0][1] = 0;for(int i = 0;i <= T;i++) {for(int j = 1;j <= N;j++) {//waitf[i + 1][j] = min(f[i + 1][j],f[i][j] + 1);//go left_busif(right_bus[j][i] && j > 1 && i + cost[j - 1] <= T) {f[i + cost[j - 1]][j - 1] = min(f[i + cost[j - 1]][j - 1],f[i][j]);}//go right_busif(left_bus[j][i] && j < N && i + cost[j] <= T) {f[i + cost[j]][j + 1] = min(f[i + cost[j]][j + 1],f[i][j]);}}}printf("Case Number %d: ",kase++);if(f[T][N] == inf) puts("impossible");else printf("%d\n",f[T][N]);}return 0;
}
转载于:https://www.cnblogs.com/rolight/p/3966017.html
UVA 1025 A Spy in the Metro DP水题相关推荐
- Uva 1025 - A Spy in the Metro(DP)
题目链接 https://vjudge.net/problem/UVA-1025 [题意] 某城市里的地铁是线性的,有n个车站(2<=n<=50),有M1辆列车从第1站从左往 ...
- uva 1025——A Spy in the Metro
题意:有一个线性的车站(1-n),两个方向的车,给出列车的出发时刻和到下一站的时间,要求在到达n前换乘的等待时间最短. 思路:dp,每次有3种决策,要么等一分钟,要么往左走,要么往右,在3种决策下找到 ...
- UVa 1025 A Spy in the Metro
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=35913 预处理出每个时间.每个车站是否有火车 为了方便判断是否可行,倒推处理 ...
- 寒假每日一题题解(1.29)摘花生(DP水题)
摘花生 Hello Kitty想摘点花生送给她喜欢的米老鼠. 她来到一片有网格状道路的矩形花生地(如下图),从西北角进去,东南角出来. 地里每个道路的交叉点上都有种着一株花生苗,上面有若干颗花生,经过 ...
- 洛谷P1352 没有上司的舞会(树形DP水题)
题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数Ri, ...
- 合并石子 区间dp水题
合并石子 链接: nyoj 737 描述: 有N堆石子排成一排,每堆石子有一定的数量.现要将N堆石子并成为一堆.合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这两堆石子的和,经过N- ...
- POJ1887 DP水题儿
http://poj.org/problem?id=1887 题目很基础,就是求 最长减子数列 dp[i]=max{ max{ dp[j]+1 (arr[i]<arr[j] ; 1< ...
- 郊区春游(状压DP水题)+ 记录路径
题目链接: https://ac.nowcoder.com/acm/problem/16122 题目大意: 中文 具体思路: 首先对全图跑一遍floyed,然后dp[i][j]表示第i个状态在j点停下 ...
- 学校作业-Usaco DP水题
好吧,因为USACO挂掉了,所以我写的所有代码都不保证正确性[好的,这么简单的题,再不写对,你就可以滚粗了! 第一题是USACO 2.2.2 ★Subset Sums 集合 对于从 1 到 N 的连 ...
最新文章
- Surface Shading in Tiger Book
- python 数组赋值_LeetCode基础算法题第182篇:一维数组的运行总和
- 原始Junit测试Spring的问题
- SAP CRM Fiori 标准应用 My Account - search by ID 根据 ID 进行搜索的标准功能实现原理
- android10适配机型华为,EMUI10适配机型进度公布 这10款机型将率先尝鲜
- 地球绕太阳一圈有多远
- 从2019年开始,越来越多的人关注“副业”这个词
- c语言123 u0010%10,mbsrtowcs_s
- JAVA反射--通过反射对pojo进行UT覆盖率测试
- 关于java分包原则
- C语言 Mkl 矩阵乘法,MKL库矩阵乘法
- android怎么测试网速,怎样用手机测网速 安卓手机测网速的方法推荐
- 【此后无良辰】实验13 FAT12文件系统
- java最好用的浏览器_国内好的pc浏览器评测
- Windows 10环境下TensorFlow(gpu版本)配置教程——[图解] [详细版][零基础]
- python打九九乘法表上三角下三角_python经典练习题之九九乘法表、打印菱形、打印对顶三角形、斐波拉契数列、素数... - 小黑电脑...
- 代码故障检测列表(持续更新)
- java调用命令行校对系统时间
- 【ISP】Sharpen(2)
- sql视图 view 和 MATERIALIZED VIEW