NOIP2014 飛揚的小鳥

2022-05-01 04:51:07 字數 924 閱讀 8819

令f[i][j]表示飛翔到(i,j)的最小點選次數

f[i][j]=min(f[i-1][j-k*x[i-1]+k,f[i-1][j+y[i-1]]

這樣做複雜度o(n^2m)

考慮優化這個過程,先考慮上公升的情況,則f[i][j]有兩類決策轉移:

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

2.f[i][j]=min(f[i-1][j-k*x[i-1]]+k)

第二類的答案已經被記入f[i][j-x[i-1]]中,這樣可以得到新的轉移方程:f[i][j]=min(f[i][j],min(f[i−1][j−x[i−1]],f[i][j−y[i−1]])+1)

根據題目要求,轉移時要先處理上公升,後處理下降

#include#include#include#include#include#includeusing namespace std;

struct ios

template inline ios & operator >> (_tp&x)

for(x=0;isdigit(ch);ch=gc())x=x*10+(ch^'0');

sgn&&(x=-x); return *this;

}//orz 浮塵ii*

}io;

int n,m,k,ans=1<<30,x[10005],y[10005],l[10005],r[10005],f[10005][2005],xx,yy,zz;

bool ok[10005];

int main()

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

for (register int i=1;i<=m;++i) f[0][i]=0;

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

} }return 0;

}

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