vijos p1002——过河(noip2005提高组T2)

描述

在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧。在桥上有一些石子,青蛙很讨厌踩在这些石子上。由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点:0,1,……,L(其中L是桥的长度)。坐标为0的点表示桥的起点,坐标为L的点表示桥的终点。青蛙从桥的起点开始,不停的向终点方向跳跃。一次跳跃的距离是S到T之间的任意正整数(包括S,T)。当青蛙跳到或跳过坐标为L的点时,就算青蛙已经跳出了独木桥。

题目给出独木桥的长度L,青蛙跳跃的距离范围S,T,桥上石子的位置。你的任务是确定青蛙要想过河,最少需要踩到的石子数。

对于30%的数据,L <= 10000;
对于全部的数据,L <= 10^9。

格式

输入格式

输入的第一行有一个正整数L(1 <= L <= 10^9),表示独木桥的长度。第二行有三个正整数S,T,M,分别表示青蛙一次跳跃的最小距离,最大距离,及桥上石子的个数,其中1 <= S <= T <= 10,1 <= M <= 100。第三行有M个不同的正整数分别表示这M个石子在数轴上的位置(数据保证桥的起点和终点处没有石子)。所有相邻的整数之间用一个空格隔开。

输出格式

输出只包括一个整数,表示青蛙过河最少需要踩到的石子数。

样例1

样例输入1

10
2 3 5
2 3 5 6 7

样例输出1

2

限制

1s

由于路径太长,所以可以剪去一些不必要的路径。
可以发现,当路径长度剪去n个s*t时,对后面是没有影响的,但是当s=1,t=2,L=6时,会发现是不能剪完的,必须要留出一个s*t。
还有s=t的特判,此时走过的路径是固定的,单独处理即可。
DP转移方程:
ans[i]=min(ans[i-j]+k[i],ans[i]);(i为pos,j为步长)
 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cmath>
 4 #include<cstring>
 5 #include<algorithm>
 6 #include<cstdlib>
 7 using namespace std;
 8 long long l,s,t,m;
 9 long long map[1000005];
10 long long k[1000005];
11 long long pos[105];
12 long long ans[1000005];
13 long long min(long long x,long long y)
14 {
15     if(x<y)return x;
16     return y;
17 }
18 int main()
19 {
20     for(int i=0;i<=1000004;i++)
21     ans[i]=99999999;
22     scanf("%I64d%I64d%I64d%I64d",&l,&s,&t,&m);
23     long long mod=s*t;
24     for(int i=1;i<=m;i++)
25     scanf("%I64d",&pos[i]);
26     sort(pos+1,pos+m+1);
27     int temp=0;
28     for(int i=1;i<=m;i++)
29     {
30         long long cha=pos[i]-pos[i-1];
31         long long qwe=cha;
32         cha%=mod; qwe/=mod;
33         temp+=cha;
34         if(qwe!=0)
35         temp+=mod;
36         k[temp]=1;
37     }
38     temp+=s*t;
39     if(s==t)
40     {
41         long long u=0;long long v=s;int an=0;
42         while(u<=temp)
43         {
44             u+=v;
45             if(k[u])an++;
46         }
47         printf("%d",an);
48         exit(0);
49     }
50     for(int i=0;i<=s-1;i++)
51     ans[i]=0;
52     for(int i=s;i<=temp;i++)
53     {
54         for(int j=s;j<=t;j++)
55         {
56             if(i-j<0)break;
57             if(i-j>0&&i-j<s)continue;
58             ans[i]=min(ans[i-j]+k[i],ans[i]);
59         }
60     }
61     printf("%I64d",ans[temp]);
62 }

 

转载于:https://www.cnblogs.com/937337156Zhang/p/6044183.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/256035.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JNI学习

1. 目前调用关系已经搞清楚&#xff0c;需要编译一个so或者dll的动态库给java调用。 2. env有很多方法现在还不清楚&#xff0c; 获得属性句柄。 JNI方法描述符&#xff0c;主要就是在括号里放置参数&#xff0c;在括号后面放置返回类型&#xff0c;如下&#xff1a;&#xff0…

【项目实战】——USB双路继电器电脑控制灯的开关(Python)

环境&#xff1a;window10、Python3.7.9 依赖库&#xff1a;pyserial 硬件&#xff1a;220V灯带、220V吊灯、USB双路继电器、电笔 1、安装Python第三方库pyserial 2、清楚插座的零火线&#xff08;用电笔去测试&#xff0c;灯亮为火线&#xff09; 3、清楚灯的零火线&#…

字符串去掉空格

2019独角兽企业重金招聘Python工程师标准>>> String s1s.trim().replaceAll("\\s*", ""); 转载于:https://my.oschina.net/u/2842177/blog/1587850

cntk-notes

cntk Embedding layer “Embedding” refers to representing words or other discrete items by dense continuous vectors. This layer assumes that the input is in one-hot form. E.g., for a vocabulary size of 10,000, each input vector is expected to have dimensio…

ubuntu安装配置elasticSearch(vagrant)

安装jdk sudo apt-get install python-software-properties sudo add-apt-repository ppa:webupd8team/java sudo apt-get update sudo apt-get install oracle-java8-installer sudo update-alternatives --config java 安装elasticSearch mkdir /usr/local/elasticsearch/ su…

深入理解javascript函数进阶系列第一篇——高阶函数

前面的话 前面的函数系列中介绍了函数的基础用法。从本文开始&#xff0c;将介绍javascript函数进阶系列&#xff0c;本文将详细介绍高阶函数 定义 高阶函数(higher-order function)指操作函数的函数&#xff0c;一般地&#xff0c;有以下两种情况 1、函数可以作为参数被传递 2…

ANSYS WORKBENCH——参数化建模以及参数优化(结果导出为Excel)

目录 1、打开软件workbench 2、找到static structure,双击打开 3、选择材料 4、参数化建模 ​

centos 安装软件

1&#xff09;一种是软件的源代码&#xff0c;您需要自己动手编译它。这种软件安装包通常是用gzip压缩过的tar包&#xff08;后缀为.tar.gz&#xff09;。2&#xff09;另一种是软件的可执行程序&#xff0c;你只要安装它就可以了。这种软件安装包通常被是一个RPM包&#xff08…

【图像处理】——傅里叶变换、DFT以及在图像上的应用

目录 1、傅里叶变换 2、DFT 1)一维离散傅里叶变换: 离散傅里叶变换例子

JAVA开发Web Service几种框架介绍

下面分别介绍一个这几种Web Service框架的基本概念 1、JWS是Java语言对WebService服务的一种实现&#xff0c;用来开发和发布服务。而从服务本身的角度来看JWS服务是没有语言界限的。但是Java语言为Java开发者提供便捷发布和调用WebService服务的一种途径。 2、Axis2是Apache下…

基于CMake构建MSVC_CUDA及MinGW编译环境下的的OpenCV项目

前言 第一次搭建OpenCV开发环境的时候各种报错&#xff0c;内心那个烦啊&#xff0c;简直了。当时只能针对某个特定的错误去寻找特定的解决方法&#xff0c;在OpenCV构建过程中出现最多的问题就是各个模块文件的下载问题&#xff0c;本质上这类问题的解决思路都是一样的&#…

OC Autorelease

implementation ViewController - (void)viewDidLoad {[super viewDidLoad];__unsafe_unretained NSObject *obj1 [ViewController getObj];NSLog("%",obj1); // 运行OK__unsafe_unretained NSObject *obj2 [ViewController getObj];NSLog("%",obj2); //…

【opencv】——钢管计数(霍夫圆变换 + 阈值 + canny)

目录 方法一:霍夫圆变换 + canny 方法二 阈值 + 寻边 对图中的钢管进行计数 方法一:霍夫圆变换 + canny

svn服务器搭建-SuSE Linux Enterprise Server 11 SP3

svn存储版本数据也有2种方式&#xff1a;1.bdb&#xff1b;2.fsfs。因为BDB方式在服务器中断时&#xff0c;有可能锁住数据&#xff08;搞ldap时就深受其害&#xff0c;没法根治&#xff09;&#xff0c;所以还是FSFS方式更安全一点&#xff0c;我也选择这种方式。下载相关软件…

Swift 2.0初探:值得注意的新特性

转眼间&#xff0c;Swift已经一岁多了&#xff0c;这门新鲜、语法时尚、类型安全、执行速度更快的语言已经渐渐的深入广大开发者的心。我同样也是非常喜爱这门新的编程语言。 今年6月&#xff0c;一年一度的WWDC大会如期而至&#xff0c;在大会上Apple发布了Swift 2.0&#xff…

Android 自定义WebView弹窗及屏蔽弹窗

额&#xff0c;还是那个WebView的问题&#xff0c;内核已换成腾讯X5内核&#xff0c;所以接下来的内容会有一些X5内核的方法。但我们的H5是不能改的&#xff0c;还是只有委屈我们自己。先看看H5自带的弹窗 这样子的弹窗在不同的手机上呈现的可能是不同的效果&#xff0c;效果不…

【图像处理】——Python实现two_pass方法来进行连通域的提取

目录 一、相关知识 1、two_pass算法思想 2、并查集算法 二、自定义的two_pass算法

C++ 多线程使用future传递异常

如果 std::async 调用的函数抛出异常&#xff0c;那么这个异常会被存储在值的位置&#xff0c;同时 future 变为 ready ,如果调用 get() 会重新抛出存储的异常。 Note: 标准并没有指定原来的异常对象是被重新抛出或者拷贝后抛出&#xff0c;不同的编译器会做不同的选择。 对于 …

期货黄金与现货黄金比较

现货黄金与期货黄金是目前市场上最热门的黄金投资方式&#xff0c;与国内任何的金融投资品相比&#xff0c;都具有一定的优势。 其实金投网小编觉得现货黄金与期货黄金最主要的不同点是这个&#xff1a;期货黄金做的是国内市场&#xff0c;同股票市场一样&#xff0c;里面有庄家…

DNS域传送漏洞

0x00 相关背景介绍 Dns是整个互联网公司业务的基础&#xff0c;目前越来越多的互联网公司开始自己搭建DNS服务器做解析服务&#xff0c;同时由于DNS服务是基础性服务非常重要&#xff0c;因此很多公司会对DNS服务器进行主备配置而DNS主备之间的数据同步就会用到dns域传送&#…