這道題最簡單的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 取反 一元運算子,...