2019牛客暑期多校訓練營(第一場)E題

2021-09-25 09:45:56 字數 1034 閱讀 7489

//知識點:dp

dp[a][b]表示前a+b個中有a個a,b個b那麼我們要找的結果就是dp[n+m][n+m]

先找邊界條件,注意最後要配成n個ab和m個ba,那麼就說明不能有n個以上的a或者m個以上的b在前

以第乙個樣例為例 1個ab,2個ba,有三個a和三個b 當出現兩個a在前: aa____ 或者三個b在前: bbb___ 這時的情況不滿足dp[a][b]=0;

總結一下就是前面有n個單獨的a或者m個單獨的b 單獨的表示沒有被使用(被搭配)

接下來就是找遞推方程

就是找下一位是a或者是b: dp[a][b]=dp[a-1][b]+dp[a][b-1] 注意這個加法要取餘數

#include

using namespace std;

const

int mod=

1e9+7;

const

int maxn=

1e3+5;

long

long dp[maxn+maxn]

[maxn+maxn]

;long

long

plus

(long

long a,

long

long b)

//相加取餘數

intmain()

for(

int b=m+

1;b<=n+m;b++

)//超過m個都不成立

for(

int a=

1;a<=n;a++

)//對a討論,先分配n個ab中的a

for(

int b=m+a+

1;b<=m+n;b++

)//搭配完後單獨的b超過m個不成立

}for

(int a=n+

1;a<=n+m;a++

)//n個ab中開頭的a分配完

for(

int b=a-n;b<=m+n;b++)}

cout<[n+m]

<}}

牛客暑期多校訓練營B Boundary

給定n個點,然後確定乙個過原點的圓,要使這n個點盡可能多的存在與圓上,最後輸出最多的存在於圓上的點的個數 三點確定乙個圓,我們已知這個圓必定經過原點,所以再依次利用三點求圓心的公式列舉每兩個點與原點 三點不共線 確定的圓心,最後選擇確定次數最多的圓心構成的圓 include include incl...

2019牛客暑期多校訓練營(第一場)

題意 題解 c 版本一 題意 題解 c 版本一 題意 題解 c 版本一 題意 題解 c 版本一 題意 題解 c 版本一 題意 題解 數學 計算幾何 邏輯推理 c 版本一 題解 特例 正三角形 取重心 中點 頂點,則期望為 公式 author stzg language c include inclu...

2019牛客暑期多校訓練營(第九場)

d knapsack cryptosystem 折半搜尋,晚上又去看了挑戰程式設計,對於時間複雜度高的情況,可以通過犧牲空間來降低時間複雜度。先把前半部分所有可以組合的情況列舉出來,然後對於後半部分依次列舉,那麼複雜度變化為o 2 36 o 2 18 2 18log 18 顯然就可做了,折半的裸題。...