2019牛客多校第一場E ABBA dp

2022-08-10 04:03:09 字數 894 閱讀 7621

給出2(n+m)個ab字元,問能構造出n個ab子串行和m個ba子串行組成的2*(n+m)的序列種類有多少

碰到計數構造類的題目,首先要去找到判斷合法性的條件,即什麼情況下合法,什麼情況下非法,剩下的工作無非就是實現問題,要麼排列組合,要麼dp,要麼一起用。本題中,還要考慮構造中的貪心問題,也就是給你一堆ab,你怎麼構造?很容易想到肯定是前面的a和最後幾個b構造出ab,剩下的b和剩下的a構造出ba,也就是前面幾個a是用來構造ab的,前面幾個b是用來構造ba的,那麼我們就可以得出合法判斷條件,前面的a過多,導致ab過多 也就是當前a的數量-b的數量》所需ab的數量即:i-j>n 同理b的判斷條件為j-i>m 轉移很直白,**量也很短

#includeusing namespace std;

const int maxn=5e3+5;

long long dp[maxn][maxn];

const int mod=1e9+7;

long long add(long long x,long long y)

int main()

dp[0][0]=1;

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

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

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

// else if(i>n&&j-m-(i-1-n)>=1)dp[i][j]=add(dp[i-1][j],dp[i][j-1]);

// else if(i>n&&j<=m)dp[i][j]=0;

// else if(j>m&&i-n-(j-1-m)>=1)dp[i][j]=add(dp[i-1][j],dp[i][j-1]);}}

cout<}

return 0;

}

2019牛客多校第一場

看到這裡我還能說什麼呢?自己慢慢證吧 就是這個 而 了 大佬們的結論是 三角形面積的22倍。我.手動膜拜。不會證.while true try x1,y1,x2,y2,x3,y3 map int,input split s abs x1 y2 x2 y1 x2 y3 x3 y2 x3 y1 x1 y...

2019 牛客多校 第一場

a 題意 就是兩個陣列,找最大的p,使對於1到p的所有子區間都保證最小值的下標相同 題解 每次往後加乙個值 第i 1位 都會多出 i 個區間,當a i 1 大於max a 1 a i 時沒有影響,當a i 小於max a 1 a i 時,因為a i 1 的加入會導致區間的rmq l到r 的 最小值的...

2019 牛客多校第一場 F

題目傳送門 考場上看到輸出36e,且保證36e是整數,然後想起整點三角形,面積一定是x 2,那麼可以猜出期望是三角形面積的x 18。理性分析,期望肯定大於1 2,不會超過2 3,或者超過一點,於是盲猜一發11 18過了。然後看到了正解,其實好像還挺好算了。不過求圖形期望這種沒什麼經驗,不知道怎麼去討...