NOIP2014 飛揚的小鳥

2022-05-21 06:29:39 字數 1321 閱讀 5858

題解:首先設定乙個狀態dp[i][j]表示到達位置i高度為j的最小點選次數。

我們討論一下:

在i-1為位置跳的情況----

(1)cap[i][j]=min(cap[i][j],cap[i-1][j-up[i-1]]+1);//由i-1位置跳一次而來

cap[i][j]=min(cap[i][j],cap[i][j-up[i-1]]+1);//可以解決多次點選的疊加效果(自己理解一下)

(2)for(int p=j-up[i-1];p<=m;p++)//當當前的高度為m時,顯然可以由i-1位置的高度從j-up[i-1]到m到的狀態轉移過來

下落的情況------

for(int j=l[i]+1;j<=h[i]-1;j++)

以下是**。

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#define maxn 10010

#define ll long long int

using

namespace

std;

const

int inf=1e9;

const

int eps=1e-8

;struct

nodet[maxn];

int cap[10001][1001];//

到達橫座標為i高度為j的地方的最小步數

intn,m,k;

intw[maxn];

intl[maxn],h[maxn];

intup[maxn],down[maxn];

intmain()

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

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

cap[i][j]=inf;

cap[

0][0]=inf;

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

if(j==m)}}

for(int j=l[i]+1;j<=h[i]-1;j++)

for(int j=1;j<=l[i];j++) cap[i][j]=inf;

for(int j=h[i];j<=m;j++) cap[i][j]=inf;

}int ans=inf,tot=k;

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

if(tot==k)

else

return0;

}

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