這題關於dp
用f[i][j]表示橫座標為i時高度為j的最少點選次數。
用正無窮來表示不可能達到這個狀態。
於是我們可以分析出狀態轉移的方式:
上公升——完全揹包轉移方式
下降——01揹包轉移方式
超過m變為m——特判
細節詳見**
#include
#include
#include
using
namespace std;
int maxx=
100000
;int l[
10010
],h[
10010];
int f[
10010][
1010];
int x[
10010
],y[
10010];
bool p[
10010];
intmain()
l[n]=0
; h[n]
=m+1
;for
(i=0
;i)for
(i=1
;i<=n;i++)}
f[0]
[0]=maxx;
for(i=
1;i<=m;i++
)for
(i=1
;i<=n;i++)}
f[i]
[j]=
min(f[i]
[j],f[i-1]
[j-x[i-1]
]+1)
; f[i]
[j]=
min(f[i]
[j],f[i]
[j-x[i-1]
]+1)
;}for(j=
max(
1,l[i]+1
);j<=
min(m-y[i-1]
,h[i]-1
);j++
)for
(j=l[i]
;j>=
1;j--
)for
(j=h[i]
;j<=m;j++)}
int ans=maxx;
int cnt=k;
for(i=n;i>=
1;i--)if
(ansif(p[i]
==true)}
if(cnt==k)
else
return0;
}
P1941 飛揚的小鳥
定義dp i j 表示走到座標 i,j 時的最小點按次數。考慮遞推關係,能走到座標 i,j 一種情況是從前乙個位置下降上公升的轉移是乙個完全揹包,下降是01揹包。include using namespace std define ll long long define inf 0x3f3f3f d...
P1941 飛揚的小鳥
miku 定義 f 為到達 i,j 的最小代價 然後對於從下往上,因為可以點無數次,是個完全揹包,從上往下就一次,01揹包,飛到天花板上的,拽下來 水管特判 include include includeusing namespace std const int maxn 10005 int n,m...
P1941 飛揚的小鳥
動態規劃,設 f i j 表示小鳥到達座標 i j 所要點選螢幕的最少次數,如果小鳥無法到達 i j 則 f i j inf。轉移,考慮小鳥上公升,和下降兩種狀態。因為,在乙個點上公升次數不限,下降只有一次。所以上公升可以用 完全揹包 的狀態轉移,下降用 01揹包 轉移。特判,當小鳥到達頂上 m 時...