設 f[i][j]表示在座標(i,j)點時的最小點選螢幕次數。
dp方程為 f[i][j]=min(f[i-1][j-x[i-1]]+1,f[i][j-x[i-1]]+1,f[i-1][j+y[i-1]]);
分別表示點選一次,點選多次和下降的情況。
實現方案如下:
首先全部賦最大值
然後處理一次點選和連續點選,注意到了上界需要特殊的搞一下
再處理下落的情況
處理完後記得把柱子的f賦為最大值
然後最後掃一遍判斷答案
#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;const int maxn=10000+10;
const int maxm=1000+10;
const int inf=100000000;
int f[maxn][maxm];
int x[maxn],y[maxn],down[maxn],up[maxn];
int main()
for(int j=m-x[i-1];j<=m;j++)
for(int j=down[i]+1;j<=up[i]-1;j++)
if(j+y[i-1]<=m)
f[i][j]=min(f[i][j],f[i-1][j+y[i-1]]);
for(int j=1;j<=down[i];j++) f[i][j]=inf;
for(int j=up[i];j<=m;j++) f[i][j]=inf;
}int ans=inf,num=a;
for(int i=n;i>=1;i--)
{for(int j=down[i]+1;j
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,豎直移動的距離由...