飛揚的小鳥

2021-08-20 19:44:21 字數 934 閱讀 1622

飛揚的小鳥

這一題開始看到時就知道是dp,但作死打了個dfs,只有75分……

//卡常**好

#includeusing namespace std;

const int n = 10005;

const int inf = 9999999;

int g_sum[n],g_up[n],g_down[n],up[n],down[n],n,m,k,f[n][1005],ff,p,l,h,ans,anss=inf;

inline void dfs(int x,int y,int o)

dfs(x+1,y-down[x],o);

for(register int i=1;y+i*up[x]<=m+up[x];i++)

dfs(x+1,y+up[x]*i,o+i);

}int main()}}

}return 0;

}

"剪枝減去我們的(到我們)瘋狂……」

快瘋掉了,然後打了一波dp,維護把三重迴圈優化成了兩重,

上吧,我的**:

#includeusing namespace std;

const int n = 10005;

const int inf = 9999999;

int g_sum[n],g_up[n],g_down[n],up[n],down[n],n,m,k,f[n][1005],ff,p,l,h,ans,anss=inf,fa[n];

void work()

for(register int j=m;j<=m+u;j++)

} for(int i=1;i<=m;i++) if(f[n][i]!=inf) ff=1;

}int main()}}

} return 0;

}

飛揚的小鳥

顯然的思路,用網路流做。對每個洞拆點,i.j表示第i個洞被通過這個洞的倒數第j隻鳥通過。然後連邊跑費用流。然而邊數太多直接 怎麼辦?注意到i.j沒被流i.j 1就絕不可能被流。因此動態加邊,初始只連所有到x.1的。目前連到x.y,流成功一次加上所有到x.y 1的邊。然後莫名很慢,所以這裡本辣雞加上了...

飛揚的小鳥

首先這道題爆搜可做,理論上可以拿50分的,但由於windows下棧空間只有3w多,所以只能拿到35分。然後我們考慮dp 應該很容易想到是dp 定義狀態f i j 為在點 i,j 時最少的觸屏次數,然後列舉觸屏次數轉移即可。這樣複雜度是o nm 2 可以拿70分,但這裡很容易犯的的乙個錯誤就是當在螢幕...

飛揚的小鳥

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