cogs1805 飛揚的小鳥 dp

2022-03-27 02:32:40 字數 996 閱讀 2671

題意:一堆管子,問怎麼用最少點選次數穿出去。

就是個裸揹包啊……優化都沒有……

另外這份**在$uoj$上被$hack$了,有沒有某位$dalao$幫忙找找問題……

1 #include2 #include3 #include4 #include5

using

namespace

std;

6const

int maxn=10000+5,maxm=1000+5,inf=0x3f3f3f3f;7

intx[maxn],lowe[maxn],uppe[maxn],y[maxn],cnt[maxn][maxm],n,m,k;

8int

haha()

919 cnt[0][0]=inf;

20int done=0;21

int minn=inf;bool ok=0;22

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

2334

if(minn1;35

}36for(int j=lowe[i]+1;j)

37if(j+y[i-1]1]&&cnt[i-1][j+y[i-1]]1][j+y[i-1]],ok=1;38

for(int j=0;j<=lowe[i];j++)cnt[i][j]=inf;

39if(uppe[i]>m)

4046

if(cnt[i][m]1;47

}48if(!ok)

4953

if(uppe[i]!=m+1)done++;54}

55 minn=inf;

56for(int i=lowe[n]+1;imin(minn,cnt[n][i]);

57 printf("

1\n%d\n

",minn);58}

59int sb=haha();

60int main()

cogs1805

(臥槽第一篇寫了博的dp)

飛揚的小鳥

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

飛揚的小鳥

飛揚的小鳥 這一題開始看到時就知道是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...

飛揚的小鳥

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