Vijos p1002 過河 離散化距離 區間DP

2022-03-25 12:28:27 字數 1903 閱讀 7486

題意:一條長度為l(l <= 1e9)的橋上有n(1<= n <= 100)顆石頭。橋的起點為0終點為l.乙隻青蛙從0開始跳,每次跳的長度在s,t(1<= s <= t <= 10)之間。問青蛙過河最少踩到的石頭的數量?

思路:區間dp的感覺很強烈。。但是範圍實在是太大了。並且有一種感覺就是當兩顆相鄰的石頭之間的距離相距很遠時,其中間的很大一段其實狀態只是乙個遞推的關係,即只是傳遞,並沒有改變一段區間的狀態。並且有數學公式的支援;

p*x + (p+1)*y = q;其中p,p+1表示跳躍的距離,x,y分別表示對於跳躍距離的次數;

當q >= p(p-1)時,從該起點到q之後的每乙個點都能到達。證明很簡單,只需要通過mod就可以得出x,y的取值;

這樣直接特判s = t的情況,之後離散化距離;

當a[i] - a[i-1] >= 90(原本應該是72的,但是wa了一點...),直接mod 90即可;

被各種初始化...wa了;

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define rep0(i,l,r) for(int i = (l);i < (r);i++)

#define rep1(i,l,r) for(int i = (l);i <= (r);i++)

#define rep_0(i,r,l) for(int i = (r);i > (l);i--)

#define rep_1(i,r,l) for(int i = (r);i >= (l);i--)

#define ms0(a) memset(a,0,sizeof(a))

#define ms1(a) memset(a,-1,sizeof(a))

#define msi(a) memset(a,0x3f,sizeof(a))

#define inf 0x3f3f3f3f

#define lson l, m, rt << 1

#define rson m+1, r, rt << 1|1typedef pair

pii;

#define a first

#define b second

#define mk make_pairtypedef __int64 ll;

template

void read1(t &m)

while(ch>='

0'&&ch<='9')

m = x*f;

}template

void read2(t &a,t &b)

template

void read3(t &a,t &b,t &c)

template

void

out(t a)

int t,kase = 1

,i,j,k,n,m;

int dp[10000],a[107],p[10000],tmp[107

];int

main()

sort(a,a+m+1

); a[

0] = 0,a[++m] =l;

rep1(i,

1,m)

rep1(i,s,t) dp[i] =p[i];

rep1(i,

2*s,tmp[m])

printf(

"%d\n

",dp[tmp[m]]-1);//

設定了l處也有石頭

return0;

}

vijos p1002 過河(離散化dp)

過河 在河上有一座獨木橋,乙隻青蛙想沿著獨木橋從河的一側跳到另一側。在橋上有一些石子,青蛙很討厭踩在這些石子上。由於橋的長度和青蛙一次跳過的距離都是正整數,我們可以把獨木橋上青蛙可能到達的點看成數軸上的一串整點 0,1,l 其中l是橋的長度 座標為0的點表示橋的起點,座標為l的點表示橋的終點。青蛙從...

洛谷 P1052 過河 dp 離散化

在河上有一座獨木橋,乙隻青蛙想沿著獨木橋從河的一側跳到另一側。在橋上有一些石子,青蛙很討厭踩在這些石子上。由於橋的長度和青蛙一次跳過的距離都是正整數,我們可以把獨木橋上青蛙可能到達的點看成數軸上的一串整點 0,1,l 其中l是橋的長度 座標為0的點表示橋的起點,座標為ll的點表示橋的終點。青蛙從橋的...

洛谷 P1052 過河 離散化 DP

題目 在河上有一座獨木橋,乙隻青蛙想沿著獨木橋從河的一側跳到另一側。在橋上有一些石子,青蛙很討厭踩在這些石子上。由於橋的長度和青蛙一次跳過的距離都是正整數,我們可以把獨木橋上青蛙可能到達的點看成數軸上的一串整點 0,1,l 其中l是橋的長度 座標為0的點表示橋的起點,座標為l的點表示橋的終點。青蛙從...