当前位置: 首页 > news >正文

UVA1025 A Spy in the Metro (dp)

传送门


首先推状态转移方程,影响到决策的只有当前的时间和所处的车站,可以用dp[i][j]表示时刻i间谍在车站j,最少还需等待多长时间。如果达到目标即满足dp[T][n]有解,那么考虑逆序递推,从终点开始考虑如何一步步状态转移到起点,那么就是只有时间为T,当前车站为n的状态才能符合要求,这里时间t是主要决策,故dp[T][n]设为0,其他的dp[T][i]为inf

因为每趟车的出发时间给定且两个车站之间的路程时间给定,那么我们可以预处理每一辆车hsa_train[i][j][0\1]表示时刻i,在车站j是否有向右/左开的车

然后每次都有三个状态去转移:

1.等待1分钟(1个时间单位)

dp[i][j]=dp[i+1][j]+1;即当前状态由前一个时间单位仍在j车站的状态得到

2.如果有则搭乘向右开的车

dp[i][j]=min(dp[i][j],dp[ i+t[j] ][j+1]);即当前状态是由前一个状态向左搭车得到的,因此后一个车站到左边的车站等同于左边的车站到后一个车站的时间t[j]

3.如果有则搭乘向左开的车

dp[i][j]=min(dp[i][j],dp[ i+t[j-1] ][j-1]);即当前状态是由前一个状态向右搭车得到的,因此必须加上当前车向左走间t[j-1]的时间才能到达上一个状态dp[?][j-1]

#include <set>
#include <map>
#include <stack>
#include <queue>
#include <math.h>
#include <cstdio>
#include <string>
#include <cstring>
#include <sstream>
#include <iostream>
#include <algorithm>
#include <unordered_map>
using namespace std;
#define lowbit(x) (x&(-x))
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> P;
const double eps=1e-8;
const double pi=acos(-1.0);
const int inf=0x3f3f3f3f;
const ll INF=1e18;
const int Mod=1e9+7;
const int maxn=2e5+10;

int n,T,m1,m2;
bool has_train[300][55][2];
int t[maxn],dp[300][55];

int main(){
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int kase=0;
    while(cin>>n && n){
        cin>>T;
        memset(has_train,0,sizeof has_train);
        for(int i=1;i<n;i++) cin>>t[i];
        cin>>m1;
        for(int i=1,cur;i<=m1;i++){
            cin>>cur;
            for(int j=1;j<=n;j++){
                has_train[cur][j][0]=1;
                cur+=t[j];
            }
        }
        cin>>m2;
        for(int i=1,cur;i<=m2;i++){
            cin>>cur;
            for(int j=n;j>=1;j--){
                has_train[cur][j][1]=1;
                cur+=t[j-1];
            }
        }
        //cout<<"now is here"<<endl;
        memset(dp,0,sizeof dp);
        for(int i=1;i<=n-1;i++) dp[T][i]=inf;
        dp[T][n]=0;
        for(int i=T-1;i>=0;i--)
            for(int j=1;j<=n;j++){
                dp[i][j]=dp[i+1][j]+1;
                if(j<n && has_train[i][j][0] && i+t[j]<=T)
                    dp[i][j]=min(dp[i][j],dp[i+t[j]][j+1]);
                if(j>1 && has_train[i][j][1] && i+t[j-1]<=T)
                    dp[i][j]=min(dp[i][j],dp[i+t[j-1]][j-1]);
            }
        cout<<"Case Number "<<++kase<<": ";
        if(dp[0][1]>=inf) cout<<"impossible\n";
        else cout<<dp[0][1]<<"\n";
    }
    return 0;
}

相关文章:

  • 欢迎大家来这里学习
  • UVA437 The Tower of Babylon(记忆化搜索)
  • MySQL启多个实例
  • UVA116 Unidirectional TSP(dp/多段图的最短路)
  • 忍受未知很重要
  • 背包九讲(1)——01背包
  • 两大重要活动议程
  • 背包九讲(2)——完全背包
  • Winforms: 把Label显示为多行
  • Codeforces Round #639 (Div. 2)
  • XXX项目鉴定总结!
  • UVA12563 Jin Ge Jin Qu hao(01背包)
  • 关于CPU步进
  • 滑动窗口的最大值(经典单调队列问题)
  • 背包九讲(3)——多重背包
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Java 内存分配及垃圾回收机制初探
  • JAVA并发编程--1.基础概念
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • quasar-framework cnodejs社区
  • SwizzleMethod 黑魔法
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • v-if和v-for连用出现的问题
  • 机器学习学习笔记一
  • 机器学习中为什么要做归一化normalization
  • 聊聊hikari连接池的leakDetectionThreshold
  • 马上搞懂 GeoJSON
  • 前端面试之闭包
  • 使用权重正则化较少模型过拟合
  • 阿里云ACE认证学习知识点梳理
  • #### go map 底层结构 ####
  • #1015 : KMP算法
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (学习日记)2024.02.29:UCOSIII第二节
  • (一)Thymeleaf用法——Thymeleaf简介
  • (一)UDP基本编程步骤
  • (一)基于IDEA的JAVA基础12
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)memcache、redis缓存
  • ***利用Ms05002溢出找“肉鸡
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .FileZilla的使用和主动模式被动模式介绍
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • ::before和::after 常见的用法
  • @Async注解的坑,小心
  • @GetMapping和@RequestMapping的区别
  • [Angular 基础] - 自定义指令,深入学习 directive
  • [Angular] 笔记 7:模块
  • [C# WPF] DataGrid选中行或选中单元格的背景和字体颜色修改