NOIP2014飛揚的小鳥

2022-08-17 14:18:20 字數 1430 閱讀 2995

飛揚的小鳥

description:

為了簡化問題,我們對遊戲規則進行了簡化和改編:

遊戲介面是乙個長為 n,高為 m 的二維平面,其中有 kk 個管道(忽略管道的寬度)。

小鳥始終在遊戲介面內移動。小鳥從遊戲介面最左邊任意整數高度位置出發,到達遊戲介面最右邊時,遊戲完成。

小鳥每個單位時間沿橫座標方向右移的距離為 1,豎直移動的距離由玩家控制。如果點選螢幕,小鳥就會上公升一定高度 x,每個單位時間可以點選多次,效果疊加;如果不點選螢幕,小鳥就會下降一定高度 y。小鳥位於橫座標方向不同位置時,上公升的高度 xx 和下降的高度 y 可能互不相同。

小鳥高度等於 0 或者小鳥碰到管道時,遊戲失敗。小鳥高度為 m 時,無法再上公升。

現在,請你判斷是否可以完成遊戲。如果可以,輸出最少點選螢幕數;否則,輸出小鳥最多可以通過多少個管道縫隙。

solution:

狀態設計:設\(dp[i][j]\)表示到第\(i\)列第\(j\)行的最小點選次數

轉移:\(前面跳一次前面跳多次前面不跳\begindp[i-1][j-up[i-1]]+1\text \\ dp[i][j-up[i-1]]+1 \\ dp[i-1][j+down[i-1]]前面不跳\end\)

\(前面跳一次跳多次if(j==m)for(k=m-up[i-1];k<=m;++j) \begindp[i-1][k]+1\\dp[i][k]+1 \end\)

轉移順序:先轉移向上的再轉移向下的,或者先轉移向下的再轉移向下的不能混合轉移

細節:注意最後再將不合法賦值成inf

code:

#include#include#includeusing namespace std;

const int maxx=10010;

int n,m,k;

int p[maxx],l[maxx],h[maxx],dp[maxx][1010],up[maxx],down[maxx],f[maxx];

int ans1=0x3f3f3f3f;

int ans2=0x3f3f3f3f;

int main()

}for(int j=1;j<=l[i]-1;++j)dp[i][j]=0x3f3f3f3f;

for(int j=h[i]+1;j<=m;++j)dp[i][j]=0x3f3f3f3f;

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

if(j>=l[i]&&j<=h[i]&&j+down[i-1]<=m)

dp[i][j]=min(dp[i][j],dp[i-1][j+down[i-1]]);

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

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

if(ans1!=0x3f3f3f3f)cout<<1

}

NOIP2014 飛揚的小鳥

題目 分析 乙個揹包問題。i,j 是跳上來的情況時 可以由 i,j k 得到,則問題得到解決。注意 f陣列要先進行上公升操作,再進行下降操作,否則 i,j k 有可能是下降得到的,從而得到錯解 吸取我的教訓吧,調了好長時間 include include using namespace std co...

NOIP2014飛揚的小鳥

天哪細節問題調了乙個鐘,手速不夠快思路不夠清晰寫了乙個鐘,感覺一道第三題就要花掉我2個鐘那我比賽的時候腫麼辦qaq 說下這道題,首先純暴力,70分到手,然後我們把01揹包的轉移變成有上界的完全揹包,還有一些特殊情況特殊轉移,還是比較好看的,去年比賽不知是電腦問題還是什麼一直沒輸出,蠢到家了然後這題爆...

NOIP2014 飛揚的小鳥

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