R2_G_Snow Boots

在一片被雪覆盖的农场小径上,农民John需要找到一条从农场到谷仓的路径,同时尽量减少丢弃靴子的数量。面对不同深度的雪和各种性能的靴子,如何通过动态规划或记忆化搜索找到最优解成为关键。

题面

G. Snow Boots

time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

It’s winter on the farm, and that means snow! There are NN tiles on the path from the farmhouse to the barn, conveniently numbered 1…N1…N, and tile ii is covered in fifi feet of snow.

Farmer John starts off on tile 11 and must reach tile NN to wake up the cows. Tile 11 is sheltered by the farmhouse roof, and tile NN is sheltered by the barn roof, so neither of these tiles has any snow. But to step on the other tiles, Farmer John needs to wear boots!

In his foul-weather backpack, Farmer John has BB pairs of boots, numbered 1…B1…B. Some pairs are more heavy-duty than others, and some pairs are more agile than others. In particular, pair ii lets FJ step in snow at most sisi feet deep, and lets FJ move at most didi forward in each step.

Unfortunately, the boots are packed in such a way that Farmer John can only access the topmost pair at any given time. So at any time, Farmer John can either put on the topmost pair of boots (discarding his old pair) or discard the topmost pair of boots (making a new pair of boots accessible).

Farmer John can only change boots while standing on a tile. If that tile has ff feet of snow, both the boots he takes off AND the boots he puts on must be able to withstand at least ff feet of snow. Intermediate pairs of boots which he discards without wearing do not need to satisfy this restriction.

Help Farmer John minimize waste, by determining the minimum number of pairs of boots he needs to discard in order to reach the barn. You may assume that Farmer John is initially not wearing any boots.

Input

The first line contains two space-separated integers NN and BB (2≤N,B≤2502≤N,B≤250).

The second line contains NN space-separated integers. The iith integer is fifi, giving the depth of snow on tile ii (0≤fi≤1090≤fi≤109). It’s guaranteed that f1=fN=0f1=fN=0.

The next BB lines contain two space-separated integers each. The first integer on line i+2i+2 is sisi, the maximum depth of snow in which pair ii can step. The second integer on line i+2i+2 is didi, the maximum step size for pair ii. It’s guaranteed that 0≤si≤1090≤si≤109 and 1≤di≤N−11≤di≤N−1.

The boots are described in top-to-bottom order, so pair 11 is the topmost pair in FJ’s backpack, and so forth.

Output

The output should consist of a single integer, giving the minimum number of boots Farmer John needs to discard. It’s guaranteed that it will be possible for FJ to make it to the barn.

Example

input

10 4
0 2 8 3 6 7 5 1 4 0
2 3
4 2
3 4
7 1

output

2

题目大意

NNN个点,第1和最后一个点雪深为0,其他的点都有雪。然后John有B双鞋子。每双鞋子所能承受的雪深是不一样的。所能走的最大距离也是不一样的。John走在某个点上必须要穿鞋,那鞋子所能承受的雪深要比这个点的雪深要大。当当前的鞋不能走动时,可以选择换鞋子。换上的鞋子也必须得承受当前的点的雪深。鞋子在背包里只能按顺序拿,要拿最下面的鞋子必须得拿出上面的鞋子。鞋子可以直接丢掉。问John要走过这条路所丢掉的最小鞋子是多少双。

题目分析

DP或者记忆化搜索都行。我们假定dp[x][k]dp[x][k]dp[x][k]是在xxx点丢掉了kkk双鞋子。那么显然在dp[fN][k]=kdp[f_N][k]=kdp[fN][k]=k,在终点的时候丢掉了几双鞋就是丢掉了几双鞋。而$dp[x][k] 则等于则等于min(dp[x+j][k + i])(x+j\le f_N,k+i < B)$(不能连最后一双鞋都丢掉了吧)。即转移方程是
dp[x][k]=min(dp[x+j][k+i])(x+j≤fN,k+i&lt;B) dp[x][k] = min(dp[x+j][k + i])(x+j\le f_N,k+i &lt; B) dp[x][k]=min(dp[x+j][k+i])(x+jfN,k+i<B)

f[x+j]≤s[k+i] 且 f[x]≤s[k+i] f[x + j] \le s[k + i] \space \text{且}\space f[x] \le s[k + i] f[x+j]s[k+i]  f[x]s[k+i]

当脱光了鞋子都不能到达目标的时候,返回一个巨大的值表示不能到达。这里要注意f[x]≤s[k+i]f[x] \le s[k + i]f[x]s[k+i]这个条件,换上的鞋也要能承受当前点的重量。这是很容易遗忘的。

代码

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int inf = 0x3f3f3f3f;
int N, B;
int f[260], s[260], d[260];
int dp[260][260];
int dfs(int x, int k){
  if(dp[x][k] != -1)
    return dp[x][k];
  if(x >= N)
    return dp[x][k] = k;
  if(k >= B + 1)
    return dp[x][k] = inf;
  int ans = inf + 7;
  for(int i = 0; k + i < B; i++){
    for(int j = 1; j <= d[k + i]; j++){
      if(x + j <= N && f[x + j] <= s[k + i] && f[x] <= s[k + i]){
        ans = min(ans, dfs(x + j, k + i));
      }
    }
  }
  return dp[x][k] = ans;
}
int main(int argc, char const *argv[]) {
  scanf("%d%d", &N, &B);
  for(int i = 0; i < N; i++)
    scanf("%d", &f[i]);
  for(int i = 0; i < B; i++)
    scanf("%d%d", &s[i], &d[i]);
  memset(dp, -1, sizeof(dp));
  printf("%d\n", dfs(0, 0));
  return 0;
}

当前,全球经济格局深刻调整,数字化浪潮席卷各行各业,智能物流作为现代物流发展的必然趋势和关键支撑,正迎来前所未有的发展机遇。以人工智能、物联网、大数据、云计算、区块链等前沿信息技术的快速迭代与深度融合为驱动,智能物流不再是传统物流的简单技术叠加,而是正在经历一场从自动化向智能化、从被动响应向主动预测、从信息孤岛向全面互联的深刻变革。展望2025年,智能物流系统将不再局限于提升效率、降低成本的基本目标,而是要构建一个感知更全面、决策更精准、执行更高效、协同更顺畅的智慧运行体系。这要求我们必须超越传统思维定式,以系统化、前瞻性的视角,全面规划和实施智能物流系统的建设。本实施方案正是基于对行业发展趋势的深刻洞察和对未来需求的精准把握而制定。我们的核心目标在于:通过构建一个集成了先进感知技术、大数据分析引擎、智能决策算法和高效协同平台的综合智能物流系统,实现物流全链路的可视化、透明化和智能化管理。这不仅是技术层面的革新,更是管理模式和服务能力的全面提升。本方案旨在明确系统建设的战略方向、关键任务、技术路径和实施步骤,确保通过系统化部署,有效应对日益复杂的供应链环境,提升整体物流韧性,优化资源配置效率,降低运营成本,并最终为客户创造更卓越的价值体验。我们致力于通过本方案的实施,引领智能物流迈向更高水平,为构建现代化经济体系、推动高质量发展提供强有力的物流保障。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值