P14508 猜数游戏 guess

dijkstra求最短路+一个简单dp

注意!!!!!!!!!调了1.5h发现f[n] >= 0x3f3f3f3f 太小了......无语

思路:

发现求d[j]从0出发,向右跳到点j需要的最小费用。

采用堆优化最短路:

需要建出点 [−n,n] 以便进行先减后加的操作:于是从NN+n表示0n

最后易得出dp转移方程

f[i] = min(f[i] , max(f[i-j]+ dist[j] , f[j] + dist[j]));

题目描述

小 P 在玩一种新型的猜数游戏。他有一个一行无数格的棋盘,在棋盘的编号为 $1$ 的格子处有一枚棋子,这枚棋子有 $m$ 种移动方式,第 $i$ 种移动方式可以使这枚棋子向左或向右移动 $a_i$ 格,使用这种方式移动的花费为 $b_i$。在棋盘上有一个隐藏的目标位置,当小 P 知道了目标位置时,游戏胜利。

当棋子从位置 $x$ 移动到位置 $x+y$ 时,它会询问 $[x,x+y)$ 是否包含目标位置。同理,当棋子从位置 $x$ 移动到位置 $x-y$ 时,它会询问 $[x-y,x)$ 是否包含目标位置($y \ge 0$)。由于棋盘无限大,所以可以移动到负数位置。

现在小 P 已经知道目标位置在 $[1,n]$ 范围内,现在请你帮他求出,在采取最优策略时(可以根据询问的结果来决定策略),最坏情况需要花费多少才能获得胜利,若无法取得胜利,输出 $-1$。

输入格式

本题有多组测试数据

输入的第一行包含两个整数 $c,T$,表示测试点编号和测试数据的组数。

接下来包含 $T$ 组数据,每组数据的格式如下:

  • 第一行包含两个整数 $n,m$,表示目标位置的范围和移动方式的数量。
  • 第二行包含 $m$ 个整数 $a_1, a_2, \dots,a_m$ 表示第 $i$ 种移动方式移动的格数。
  • 第三行包含 $m$ 个整数 $b_1, b_2, \dots,b_m$ 表示第 $i$ 种移动方式所需的代价。

输出格式

对于每组测试数据输出一个整数,表示取得胜利的最小花费。若无法取得胜利,输出 $-1$。

输入输出样例 #1

输入 #1

0 3
3 1
1
1
3 2
2 3
1 1
4 2
2 4
2 3

输出 #1

2
3
-1

说明/提示

【样例 1 解释】

对于第一组数据,最坏情况目标位置为 $3$,棋子向右移动 $2$ 格,可以判断出不是 $1$ 或 $2$,即可得出答案。

对于第二组数据,一种可能的跳法为 $1\to3\to0\to2$,可以证明没有更优的方法。

【样例 2】

见附件的 guess/guess2.in 与 guess/guess2.ans。

该样例满足测试点 $2\sim 3$ 的约束条件。

【样例 3】

见附件的 guess/guess3.in 与 guess/guess3.ans。

该样例满足测试点 $4$ 的约束条件。

【样例 4】

见附件的 guess/guess4.in 与 guess/guess4.ans。

该样例满足测试点 $7\sim 11$ 的约束条件。

【样例 5】

见附件的 guess/guess5.in 与 guess/guess5.ans。

该样例满足测试点 $15\sim 25$ 的约束条件。

【数据范围】

对于所有的数据,满足:

  • $1\le T\le 10$。
  • $1\le n\le 10^4$,$1\le m\le 1000$,$1\le a_i\le \min(n,1000)$,$1\le b_i\le 10^9$。

    ::cute-table
测试点编号 $n\leq$ $m \leq$ 特殊性质
$1$ $10$ $10$ A
$2\sim 3$ ^ ^
$4$ $100$ $20$ B
$5\sim 6$ ^ ^
$7\sim 11$ $3000$ $100$ ^
$12\sim 14$ $10^4$ $1000$ B
$15\sim 25$ ^ ^
  • 特殊性质 A:保证所有 $a_i$ 均相同。
  • 特殊性质 B:保证所有 $b_i$ 均相同。
#include <bits/stdc++.h>
using namespace std;
#define int long long const int N = 10002;
const int M = 0x3f3f3f3f3f3f3f3f;
int n,m;
int a[N],b[N];
bool vis[N*2];
int dist[N*2];
int d[N*2],f[N*2];
priority_queue<pair<int,int> >q;//大根堆 void solve(){
cin>>n>>m;
for(int i = 1;i <= m;i++) cin>>a[i];
for(int i = 1;i <= m;i++) cin>>b[i]; memset(vis,0,sizeof vis);
memset(d,0x3f,sizeof d);
d[N] = 0;
q.push({0,N});
while(!q.empty()){
long long now = q.top().second;
q.pop();
if(vis[now] == 1) continue;
vis[now] = 1; for(int i = 1;i <= m;i++){
long long to1 = now + a[i];
long long to2 = now - a[i]; if(d[to1] > d[now] + b[i] && to1 <= 20000 && vis[to1] == 0){
d[to1] = d[now] + b[i];
q.push({-1*d[to1] , to1});
}
if(d[to2] > d[now] + b[i] && to2 >= 0 && vis[to2] == 0){
d[to2] = d[now] + b[i];
q.push({-1*d[to2] , to2});
}
}
} for(int i = 0;i <= N;i++)
dist[i] = d[N+i]; memset(f,0x3f,sizeof f);
f[0] = f[1] = 0;
for(int i = 2;i <= n;i++)
for(int j = 1;j < i;j++)
f[i] = min(f[i] , max(f[i-j]+ dist[j] , f[j] + dist[j])); if(f[n] >= M) cout<<"-1"<<"\n";
else cout<<f[n]<<"\n";
return;
} signed main()
{
int c,T;
cin>>c>>T;
while(T--){
solve();
}
return 0;
}

11.18 P14508 猜数游戏 guess的更多相关文章

  1. 【BZOJ 1594】 [Usaco2008 Jan]猜数游戏 (二分+并查集)

    1594: [Usaco2008 Jan]猜数游戏 Description 为了提高自己低得可怜的智商,奶牛们设计了一个新的猜数游戏,来锻炼她们的逻辑推理能力. 游戏开始前,一头指定的奶牛会在牛棚后面 ...

  2. BZOJ 2222: [Cqoi2006]猜数游戏【神奇的做法,傻逼题,猜结论】

    2222: [Cqoi2006]猜数游戏 Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 604  Solved: 260[Submit][Status ...

  3. VBS猜数游戏

    VBS 猜数游戏 2018-11-09  21:19:11 by xutao msgbox "The Swami" ,,"Game" msgbox " ...

  4. 【BZOJ1594】[Usaco2008 Jan]猜数游戏 二分答案+并查集

    [BZOJ1594][Usaco2008 Jan]猜数游戏 Description 为了提高自己低得可怜的智商,奶牛们设计了一个新的猜数游戏,来锻炼她们的逻辑推理能力. 游戏开始前,一头指定的奶牛会在 ...

  5. 1003. 猜数游戏 (Standard IO)

    题目描述 有一个“就是它”的猜数游戏,步骤如下:请你对任意输入的一个三位数x,在这三位数后重复一遍,得到一个六位数,467-->467467.把这个数连续除以7.11.13,输出最后的商. 输入 ...

  6. bzoj 1594: [Usaco2008 Jan]猜数游戏——二分+线段树

    Description 为了提高自己低得可怜的智商,奶牛们设计了一个新的猜数游戏,来锻炼她们的逻辑推理能力. 游戏开始前,一头指定的奶牛会在牛棚后面摆N(1 <= N<= 1,000,00 ...

  7. 【bzoj1594】猜数游戏

    1594: [Usaco2008 Jan]猜数游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 556  Solved: 225 Descripti ...

  8. 剑指Offer - 九度1360 - 乐透之猜数游戏

    剑指Offer - 九度1360 - 乐透之猜数游戏2014-02-05 19:54 题目描述: 六一儿童节到了,YZ买了很多丰厚的礼品,准备奖励给JOBDU里辛劳的员工.为了增添一点趣味性,他还准备 ...

  9. BZOJ 1594 [Usaco2008 Jan]猜数游戏(线段数)

    1594: [Usaco2008 Jan]猜数游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 626  Solved: 260[Submit][S ...

  10. usaco 猜数游戏

    Description 为了提高智商,锻炼思维能力,奶牛设计了一个猜数游戏.游戏开始前,贝西会在牛棚后面摆上N个数字.所有数字排成一条直线,按次序从1到N编号.每个数字在1到10^9之间,没有两个数字 ...

随机推荐

  1. Gitee DevOps:端到端的自动化研发实践,驱动效能飞跃。

    Gitee DevOps:本土化研发效能引擎如何重塑中国软件开发范式 在数字化转型浪潮中,软件开发效率已成为企业核心竞争力的关键指标.Gitee DevOps平台凭借其深度本土化设计和全流程自动化能力 ...

  2. 怎么通过LiveNVR流媒体平台配置实现将海康Ehome、ISUP协议统一接入实现Web无插件播放、录像等,并支持转GB28181输出到国标平台

    @ 目录 1.海康 ISUP 接入配置 2.海康设备接入 2.1.海康EHOME接入配置示例 2.2.海康ISUP接入配置示例 3.通道配置 3.1.直播流接入类型 海康ISUP 3.2.海康 ISU ...

  3. LiveQing视频文件点播时上传、删除以及转码操作

    RTMP直播点播流媒体服务 搭建入口,解压启动即用:https://www.liveqing.com/docs/download/LiveQing.html 下载|删除上传的视频源文件 快速重新转码 ...

  4. 请自行构建一个Mysql容器并将Python开发数据保存到此数据库 用户名数据库名不限制

    下面是一个完整的示例,展示如何构建一个 MySQL 容器,并使用 Python 脚本将数据保存到数据库中. 1. 启动 MySQL Docker 容器 首先,确保 Docker 已经安装.然后打开终端 ...

  5. 记录一个关于Vue中img标签引入动态图片的问题

    1.直接引用图片地址可以显示, 但如果直接使用变量,则会报错can not find module.... <img src="../../assets/images/message- ...

  6. ChCore-lab5

    lab 5: 虚拟文件系统 目录 lab 5: 虚拟文件系统 目录 减少时间 Posix适配 FSM Step 1: 加锁 Step 2: 获取挂载点信息 Step 3: 客户端能力组 Step 3. ...

  7. 断电引起redo和数据文件不一致故障恢复---惜分飞

    联系:手机/微信(+86 17813235971) QQ(107644445) 标题:断电引起redo和数据文件不一致故障恢复 作者:惜分飞版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究 ...

  8. kettle导致MySQL数据丢失恢复---惜分飞

    联系:手机/微信(+86 17813235971) QQ(107644445) 标题:kettle导致MySQL数据丢失恢复 作者:惜分飞版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法 ...

  9. WPF应用绑定系统快捷键

    全局快捷键的应用 在现代桌面应用开发中,全局快捷键功能是提升用户体验的重要手段.用户无需将焦点切换到应用窗口,就能通过特定的键盘组合快速触发应用功能.本文以Rouyan,开源地址:https://gi ...

  10. P3700 [CQOI2017] 小 Q 的表格 题目分析

    这道题目真的是将必修一的抽象函数用得淋漓尽致啊. 首先观察 \(f(a,b)=f(b,a)\),嗯,并没有什么鸟用,所以我们先不管他. 然后,就盯着 \(b\times f(a,a+b)=(a+b)\ ...