原題大作戰

2022-05-02 06:06:10 字數 1890 閱讀 8129

二分,沒啥好說的,不知道為啥\(n=0,k=0\)的特殊資料會錯。

\(f[i][j][p][0/1]\)表示\(a\)串到第\(i\)個字元,\(b\)串匹配到第\(j\)個字元,一共劃分成\(p\)部分,第\(i\)個字元用\((1)\)沒用\((0)\)的方案數。

\(if(a[i]==b[j])\)

\(f[i][j][p][0]=f[i-1][j][p][0]+f[i-1][j][p][1]\)

\(f[i][j][p][1]=f[i-1][j-1][p][1]+f[i-1][j-1][p-1][0]+f[i-1][j-1][p-1][1]\)

....感覺和**一樣了啊,不寫了

#include#include#include#define mod 1000000007 

using namespace std;

const int n = 1005;

int n,m,k,f[2][205][205][2];

char a[n],b[n];

int val=1;

inline int read()

while(c>='0'&&c<='9')

return ans*w;

}int main()

else

}printf("%d\n",f[n&1][m][k][0]+f[n&1][m][k][1]);

return 0;

}

思路:最大中最小(最小中最大),百分之90可以二分。二分乙個最長的時間\(k\)。這樣就轉化成了可行性問題。

關鍵是\(check\)函式怎麼寫。

用到了樹上差分的知識。其中有乙個很巧妙地合併方法:按構建順序編個號,按這個編號的順序由大到小向上合併,即保證先合併了深度深的點,又好寫。

繼續說\(check\),對於長度大於\(k\)的路徑,用每條路徑修改差分陣列,記錄一下他們的最大值\(maxx\)和條數\(cnt\)。在所有的路徑中,只要有一條路徑\(i\)被這\(cnt\)條路徑都經過,並且\(maxx-val[i]<=k\),就\(return\)

\(true\)。否則\(return\)

\(false\)。

#include#include#includeusing namespace std;

const int n = 300005;

int n,m,head[n],tot,id[n],f[n][21],dep[n],lc[n];

int val[n],dis[n],sum[n],u[n],v[n],len[n],cnt;

struct edgee[n<<1];

inline int read()

while(c>='0'&&c<='9')

return ans*w;

}void add(int x,int y,int z)

void dfs(int u,int fa)

}void work()

int lca(int x,int y)

bool check(int k)

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

sum[f[id[i]][0]]+=sum[id[i]];

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

if(sum[i]>=tmp&&maxx-val[i]<=k)

return true;

return false;

}int main()

printf("%d\n",ans);

return 0;

}

飛機大作戰

doctype html utf 8 document title airplane body clip div enemy div style tool.js script window.onload function 敵機的建立 function sneer num var arr functi...

xinxin 蛋蛋大作戰

匯入乙個專門做遊戲的工具包 import pygame import time 1.初始化 timi loading 初始化 載入中 pygame.init 2。設定視窗的大小 screen 螢幕 display dis play 分開玩 展覽 ping mu pygame.display.set ...

灌水機大作戰

www.catcoder.com是為自己的貓搭建的論壇,基本就是我自己在上面自言自語,某日登入,突然見到有新會員新主題禁不住喜悅之情,急忙點開版塊,看到的確實洪水過後的殘敗景象,全是廣告和色情 的推廣。從此就拉開了與灌水機的大作戰。我用的論壇系統是discuz!x2。下面的講解也來自於此。一 註冊時...