過河(狀壓dp典型題)

2021-08-02 06:04:38 字數 890 閱讀 2516

這道題最簡單的dp,動態轉移方程很好推,因為它是由i-s~t轉移來的,所以

動態轉移方程為dp[i]=min(dp[i-s~t])+q[i]

然而這個題的資料太大了。。。。。10^9

不得不考慮一些沒用的操作

所以就考慮乙個問題

這個題的石子數太少了,在一定的範圍內,你不管怎樣跳,石子數也不會增加,所以你就可以把多餘的t弄掉,這樣就是狀壓dp了,把一定的沒用的範圍壓起來,這樣資料就小點了,能過了

#include

#include

#include

#include

using namespace std;

int n,m;int maxn=9999;

int f[3000];int a[101];int

q[3000];int d[101];

int ans=0;int l,s,t;

int main()

sort(a+1,a+m+1);

for(int i=1;i<=m;i++)

if(a[i]-a[i-1]>t)

d[i]=(a[i]-a[i-1])%t+t;

else d[i]=a[i]-a[i-1];

for(int i=1;i<=m;i++)

for(int i=1;if[i]=99999999;

f[0]=0;

for(int i=s;i<=a[m]+t;i++)

f[i]=w+q[i];

}for(int i=a[m];i<=a[m]+t;i++)

maxn=min(maxn,f[i]);

printf("%d ",maxn);

return

0;}

NOIP2005 狀壓DP 過河

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

狀壓dp幾道題

感覺現在只會用比較無腦比較暴力的狀壓dp,完全沒思考,就是列舉所有的狀態,等集訓結束了搜點要努力想dp方程的題做做。hdu3681 prison break 大體意思就是給了張地圖,走路要耗費能量,有能量池能補充能量,求要走完特定的幾個點初始能量的最小值 因為給的點很少所以可以用狀壓dp,走過的各自...

狀壓DP入門題

學習狀壓之前必須要熟練掌握位運算 位運算名 符號效果 and 按位與如果兩個相應的二進位制位都為1,則該位的結果值為1,否則為0 l or 按位或兩個相應的二進位制位中只要有乙個為1,該位的結果值為1 xor 按位異或 單身狗操作 若參加運算的兩個二進位制位值相同則為0,否則為1 取反 一元運算子,...