洛谷P1052 过河 动态规划

洛谷P1052 过河
通过观察可以发现
这个点很稀疏
dp 有很长一段距离都是没有用的,那么我们可以采用离散化的思想
把这个距离压缩,但同时还要保证 对答案没有影响
如果 s==t 这时候我们需要特判 只要判断 pos[ i ] % s == 0 就可以知道是否踩到石子
然后因为 最多青蛙一次只跳了 10
假如 s == 9 t == 10 如果两个石子间的距离大于100 我们每次也可以 一步步的慢慢调整 ,其实总共只有
10个状态,%10==1 %10==2 %10==3 然后我们就可以把距离 > 100 的距离变成 100
这样就将距离压缩

时间复杂度 m*100*(t-s)

 1 #include <bits/stdc++.h>
 2 #define For(i,j,k) for(int i=j;i<=k;i++)
 3 using namespace std ;
 4
 5 const int N = 100011,inf = 1e9 ;
 6 int L,s,t,m,pos[111],d[111],dp[N],a[N] ;
 7
 8 inline int read()
 9 {
10     int x = 0 , f = 1 ;
11     char ch = getchar() ;
12     while(ch<‘0‘||ch>‘9‘) { if(ch==‘-‘) f = -1 ; ch = getchar() ; }
13     while(ch>=‘0‘&&ch<=‘9‘) { x = x * 10+ch-48 ; ch = getchar() ; }
14     return x * f ;
15 }
16
17 int main()
18 {
19     L = read() ;
20     s = read() ; t = read() ; m = read() ;
21     For(i,1,m) pos[ i ] = read() ;
22     if(s==t) {
23         int sum = 0 ;
24         For(i,1,m) if(pos[ i ]%s==0) sum++ ;
25         printf("%d\n",sum) ;
26         return 0 ;
27     }
28     pos[++m] = L ;
29     pos[++m] = 0 ;                             //  起点 终点  之间的距离也要压缩
30     sort(pos+1,pos+m+1) ;
31     For(i,1,m-1) {
32         d[ i ] = pos[i+1] - pos[i] ;
33         if( d[i]>100 ) d[i] = 100 ;
34     }
35     For(i,2,m) pos[ i ] = pos[i-1] + d[i-1] ;
36     L = pos[ m ] ;
37     m-- ;
38     For(i,2,m) a[ pos[ i ] ] = 1 ;
39     dp[ 0 ] = 0 ;
40     For(i,1,L) dp[ i ] = inf ;
41     For(i,1,L)
42         For(d,s,t) {
43             if( i-d<0 ) break ;
44             dp[ i ] = min(dp[ i ],dp[ i-d ]+a[ i ]) ;
45         }
46     printf("%d\n",dp[ L ]) ;
47     return 0 ;
48 }
时间: 2024-11-08 02:50:31

洛谷P1052 过河 动态规划的相关文章

洛谷 P1052 过河

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

洛谷P1077 摆花 动态规划

洛谷P1077 摆花 DP   划分类动态规划 dp[ i ][ j ] 表示  到 第 i 种花,所有花总共取了 j 盆,总共的方案数 1 #include <cstdio> 2 #include <cstring> 3 #include <cmath> 4 #include <cstdlib> 5 #include <string> 6 #include <algorithm> 7 #include <iomanip>

【洛谷P1052【NOIP2005提高T2】】过河

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

洛谷P1002 过河卒

看到就顺便做了 NOIP2002普及组.那个年代还没有int64,不得不用高精算,然而现在一个long long就解决了.感受到了时代的进步呢. 题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为“马拦过河卒”. 棋盘用坐标表示,A点(0, 0).B点(n, m)(n, m为不超过20的整数),同样马的位置坐标是需要给出的. 现在要求你计算出卒从A点能够到达B点的路

【洛谷】【动态规划/背包】P1833 樱花

[题目描述:] 爱与愁大神后院里种了n棵樱花树,每棵都有美学值Ci.爱与愁大神在每天上学前都会来赏花.爱与愁大神可是生物学霸,他懂得如何欣赏樱花:一种樱花树看一遍过,一种樱花树最多看Ai遍,一种樱花树可以看无数遍.但是看每棵樱花树都有一定的时间Ti.爱与愁大神离去上学的时间只剩下一小会儿了.求解看哪几棵樱花树能使美学值最高且爱与愁大神能准时(或提早)去上学. [输入格式:] 共n+1行: 第1行:三个数:现在时间Ts(几点:几分),去上学的时间Te(几点:几分),爱与愁大神院子里有几棵樱花树n.

【洛谷】【动态规划(二维)】P1508 Likecloud-吃、吃、吃

[题目描述:] 正处在某一特定时期之中的李大水牛由于消化系统比较发达,最近一直处在饥饿的状态中.某日上课,正当他饿得头昏眼花之时,眼前突然闪现出了一个n*m(n and m<=200)的矩型的巨型大餐桌,而自己正处在这个大餐桌的一侧的中点下边.餐桌被划分为了n*m个小方格,每一个方格中都有一个圆形的巨型大餐盘,上面盛满了令李大水牛朝思暮想的食物.李大水牛已将餐桌上所有的食物按其所能提供的能量打了分(有些是负的,因为吃了要拉肚子),他决定从自己所处的位置吃到餐桌的另一侧,但他吃东西有一个习惯——只

【洛谷】【动态规划(多维)】P1006 传纸条

[题目描述:] 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是,他们可以通过传纸条来进行交流.纸条要经由许多同学传到对方手里,小渊坐在矩阵的左上角,坐标(1,1),小轩坐在矩阵的右下角,坐标(m,n).从小渊传到小轩的纸条只可以向下或者向右传递,从小轩传给小渊的纸条只可以向上或者向左传递. 在活动进行中,小渊希望给小轩传递一张纸条,同时希望小轩给他回复.

洛谷 【P1052】过河

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

洛谷P1586 四方定理 动态规划 + 离线

洛谷P1586 四方定理动态规划 + 离线 1 #include <bits/stdc++.h> 2 #define For(i,j,k) for(int i=j;i<=k;i++) 3 using namespace std ; 4 5 const int N = 35011 ; 6 int n,T,ans ; 7 int f[5][N],a[211] ; 8 9 inline int read() 10 { 11 int x = 0 , f = 1 ; 12 char ch = ge