題解 luogu P1941 飛揚的小鳥

2022-09-18 02:30:29 字數 1161 閱讀 4123

** 

首先想到設f[i][j]表示到第i行第j列所需要的最少點選螢幕次數。轉移方程為

f[ i ][ j ]=min (1<= k <= j/x) 上公升——①

f[ i ][ j ]=min  ( j + y[i-1] <= m) 下降

顯然,下降可以o(1)轉移,主要問題在上公升的轉移。

我們將上公升的方程變一下:

f[ i ][ j - x[i-1] ]=min ——②

這是 f[ i ][ j - x[i-1] ] 的轉移。

由 ② 化簡可得:

f[ i ][ j - x[i-1] ]=min——③

由①③消去f[ i-1 ][ j - k*x[ i-1] ]+k可得

f[ i ][ j ]= f[ i ][ j - x[ i-1 ] ]+1

於是就可以o(n*m)的時間內出解

#includeusing

namespace

std;

int dp[10005][2005], low[10005], hi[10005], a[10005], b[10005], to[10005

];int

ans, n, m, k, x, l1, l2;

intmain()

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

memset(dp,

0x3f, sizeof

(dp));

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

dp[0][i] = 0

;

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

ans = 0x3f3f3f

;

for(int i = 1; i <= m; i++) ans =min(ans, dp[n][i]);

if(ans < 0x3f3f3f

)

inti, j;

for(i = n; i >= 1; i--)

ans = 0

;

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

if(to[j]) ans++;

cout

<< "0"

<< endl

}

luogu P1941 飛揚的小鳥

為了簡化問題,我們對遊戲規則進行了簡化和改編 遊戲介面是乙個長為n 高為 m 的二維平面,其中有k 個管道 忽略管道的寬度 小鳥始終在遊戲介面內移動。小鳥從遊戲介面最左邊任意整數高度位置出發,到達遊戲介面最右邊時,遊戲完成。小鳥每個單位時間沿橫座標方向右移的距離為1 豎直移動的距離由玩家控制。如果點...

Luogu P1941飛揚的小鳥(DP)

我發現現在沒了題解我做普及提高 的題也做不了 更不要說這些提高 難度的 題 此題是乙個二維dp。暴力是三重迴圈ijk,k列舉在i位置上的點選次數。即 for int i 1 i n i for int j 1 j m j for int k 1 j k up i 0 k f i j min f i ...

luoguP1941福賴皮波德

include include include include include include using namespace std const int maxn 10010 const int inf 20172136 inline intread while isdigit ch return...