NOIP2014 飛揚的小鳥

2022-07-16 19:12:14 字數 1245 閱讀 9364

怎麼會有這麼迷的一道題!

明明思路很簡單,但要想a掉,細節怎麼就不好想呢!

很顯然的dp,狀態一目了然,處理好特殊情況,一步步推就可以了。

dp有刷表法和填表法,為了推的過程中特判是否到最高處省事,我選擇了刷表法,80分,tle了四個點,需要優化。超時主要是在於轉移上,乙個狀態近似可以轉移到m個狀態,優化是當發現某次無法取得更優解,就剪枝,因為再往下肯定不會更優。而且需要從m到1列舉,可能這樣會剪去更多的枝,好玄。。。

1 #include 2 #include 3 #include 4

5using

namespace

std;

67 inline int

get_num()

1516

const

int maxn = 1e4 + 5, maxm = 1e3 + 5, inf = 0x3f3f3f3f;17

18int tube[2][maxn], updown[2

][maxn], dp[maxn][maxm];

19//

0為下,1為上

2021

intmain()

31 memset(dp, inf, sizeof

(dp));

32 memset(dp[0], 0, sizeof(dp[0

]));

33for (int i = 0; i <= n; ++i)

34for (int j = m; j >= 0; --j)

37 cnta =max(cnta, i);

38int next = j - updown[0

][i], cnt;

39if (next > tube[0][i + 1] && next < tube[1][i + 1

])40 dp[i + 1][next] = min(dp[i + 1

][next], dp[i][j]);

41 next = j + updown[1][i], cnt = 1;42

if (next > m) next =m;

43while (next <=m) 51}

52if (ans < inf) printf("

1\n%d

", ans);

53else

58return0;

59 }

ac**

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,豎直移動的距離由...