luogu1052 過河 線性DP 路徑壓縮

2021-09-24 19:49:06 字數 999 閱讀 2318

在乙個長度是n的數軸上,有m個格仔有石頭;

從0出發,跳出數軸,每次可以跳 s-t 的距離;

問:要求踩到盡可能少石頭的情況下,踩了多少石頭。

n是109 ,m的範圍是100(最多100個石頭);

30分思路:線性dp,拿了分再說

f[i]= min(f[i], f[j]| i-t<=j<=i-s))+a[i]; //a陣列表示第 i 點是否有石頭;
30分參考**
//luogu1052:過河

//30%的做法:線性dp

#includeusing namespace std;

int n,m,s,t,ans=999999999;

int a[100005],f[100005];

int main()

memset(f,127,sizeof(f));

f[0]=0;

for(int i=s;i=0) f[i]=min(f[i],f[i-j])+a[i];

} }for(int i=n;i

100分思路:路徑空間壓縮

路徑壓縮分析

100分參考**//luogu1052:過河

//線性dp+狀態壓縮

#includeusing namespace std;

int n,m,s,t,ans=999999999;

int a[210];

int f[1000005];

int b[1000005];

int d[210];

int main()

n=a[m];//因為距離壓縮了,對岸也壓縮了

//正常跑dp

memset(f,127,sizeof(f));

f[0]=0;

for(int i=1;i<=n+t;i++) }

for(int i=n;iprintf("%d",ans);

return 0;

}

洛谷P1052 過河 dp

題目大意 獨木橋長度l,橋上有m個石頭,要過橋,起點0,只要跳到或者跳過l都算過了,每次跳躍距離是s t之間的整數值,問跳過橋最少需要踩到的石子數 dp i 表示跳躍了距離i,最少需要踩到的石子數。stone i 表示在距離i有無石頭。狀態轉移方程 dp i min dp i dp i j ston...

洛谷P1052 過河(dp)

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

DP 狀態壓縮 洛谷 P1052 過河

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