Snow Boots

传送门

题面:

Snow Boots

time limit per test:1 second
memory limit per test:256 megabytes
inputstandard:input
outputstandard:output

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

Farmer John starts off on tile 1 and must reach tile N to wake up the cows. Tile 1 is sheltered by the farmhouse roof, and tile N 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 B pairs of boots, numbered 1…B. Some pairs are more heavy-duty than others, and some pairs are more agile than others. In particular, pair i lets FJ step in snow at most si feet deep, and lets FJ move at most di 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 f feet of snow, both the boots he takes off AND the boots he puts on must be able to withstand at least f 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 N and B (2≤N,B≤250).

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

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

The boots are described in top-to-bottom order, so pair 1 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.

Sample Input

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

Sample Output

2

题面描述:

从农舍到谷仓的路径上有N个瓷砖,编号为1…N,瓷砖i覆盖在雪厚度为fi的地方,我们要从瓷砖1走到N来唤醒奶牛,瓷砖1被农舍屋顶遮挡,瓷砖N被谷仓屋顶遮挡,因此这些瓷砖都没有积雪。但是要踩到其他有雪的瓷砖需要穿鞋,现在我们有B双鞋,编号为1…B,每双鞋的属性有:最多能踩进雪厚为si的瓷砖,一步最多能前进di个瓷砖。值得注意的是每次只能从背包拿出最上面那双鞋,而且当我们换鞋时也要保证换之后的鞋能成功踩在当前瓷砖上,如果取出鞋后不换而是丢弃则不用满足这个条件。

题目分析:

一开始想用贪心做,用当前鞋子尽量走的更远,实在不能走了在换鞋,后来发现这样是不行的,因为有可能上一个瓷砖雪很薄,当前瓷砖上的雪非常厚,而下一双鞋能一步走到终点,本来可以在上一个瓷砖换鞋一步走到终点,但是由于贪心已经走到当前瓷砖了,这时候会把它丢弃,寻找能在更厚的雪上行走的鞋。后来用dp做成功了。dp[i]的状态是第i个瓷砖此时能不能走到,从第一双鞋开始每个都枚举一遍i…N,对于当前这双鞋能走到的瓷砖都标记为1,每双鞋枚举结束后都检查一下dp[n]是否能走到,能就直接输出答案i-1。

代码:

#include<algorithm>
#include<stdio.h> 
#include<iostream>
#include<string.h> 
#include<queue>
#include<vector>
using namespace std;
long long i,n,b,ans,f[255],s[255],d[255],dp[255];//dp[i]表示是否能走到第i个位置 

int main(){
	cin>>n>>b;
	for(i=1;i<=n;i++) cin>>f[i];
	for(i=1;i<=b;i++) cin>>s[i]>>d[i];
	memset(dp,0,sizeof(dp));
	dp[1]=1;
	for(i=1;i<=b;i++){//从第一双鞋往后枚举来求出最小丢弃鞋的数量 
		for(int j=1;j<=n;j++){
			if(dp[j]&&s[i]>=f[j]){//别忘了换的鞋也要能踩上这个位置 
				for(int k=j;k<=min(j+d[i],n);k++){//防止越界
					if(s[i]>=f[k]) dp[k]=1;
				} 
			}
		}
		if(dp[n]==1) break;
	}
	cout<<i-1;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yjonben

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值