在乙個長度是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的點表示橋的終...