日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

AtCoder Grand Contest 013D: Piling Up 题解

發布時間:2025/6/17 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AtCoder Grand Contest 013D: Piling Up 题解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題意簡化:

[luogu] Piling Up

一開始有n個顏色為黑白的球,但不知道黑白色分別有多少,m次操作,每次先拿出一個球,再放入黑白球各一個,再拿出一個球,最后拿出的球按順序排列會形成一個顏色序列,求顏色序列有多少種
n,m小于等于3000 答案對1e9+7取膜

一些亂七八糟的東西

這個題還是 Power_Leo101 同學教我做的, 自己太弱了,完全不會
這是菊隊ppt里推薦的題, 這個學期過了, 學長們就畢業了, 菊隊也不再會給我們講課了
雖然陳菊開學長講課的畫風毒瘤, ppt毒瘤

題解

對于每一次操作,其實是可以看成一次染色的,因為總數總是不變,而顏色卻會變化
所以對于每一次染色,即有四種情況: 嘿嘿 黑黑 , 白白, 黑白,白黑
按照常規思路:
我們不妨設 f[i][j] 表示當前進行第i次操作, 還剩下 j 個白球 (其實顏色沒影響)
所以對于每一個當前狀態則是可以有之前的狀態,通過上面列舉的四種操作得到

if (j>0)f[i][j] = f[i][j] + f[i-1][j] + f[i-1][j-1]; //是白白和白黑兩種情況if (j<n)f[i][j] = f[i][j] + f[i-1][j] + f[i-1][j+1]; //是黑白和黑黑兩種情況

但是

這連樣例都跑不過!!!

沒想到吧

這是為什么呢???

再通過觀察, 可以發現題目要求的是取出的球的不同順序方案,而在我們的處理中有了很多重復的
因為它要求的只是順序, 還在序列中的黑白球的數量并不重要!
所以求出所有的方案數之后,我們只需將 n=n-1 再跑一遍
然后用第一次的答案減去第二次的答案,就是真正的答案了. (想想為什么)

代碼 (沒有注釋,不要槍斃我)

#include<bits/stdc++.h> using namespace std; #define re register #define ll long long #define get getchar() #define in inline #define db double in int read() {int t=0; char ch=get;while(ch<'0' || ch>'9') ch=get;while (ch<='9' && ch>='0') t=t*10+ch-'0', ch=get;return t; } const int _=3010; const int mod=1e9+7; ll n,m,f[_][_]; int main() {n=read(),m=read();for (re int i=0;i<=n;i++)f[0][i]=1;ll ans=0;for (re int i=1; i<=m; i++)for (re int j=0; j<=n; j++){if(j>0)f[i][j]=(f[i][j]+f[i-1][j-1]+f[i-1][j])%mod;if(j<n)f[i][j]=(f[i][j]+f[i-1][j+1]+f[i-1][j])%mod;}for (re int i=0; i<=n; i++) ans=(ans+f[m][i])%mod;ll ans1=0;memset(f,0,sizeof(f));for (re int i=0;i<=n-1;i++)f[0][i]=1;for (re int i=1; i<=m; i++)for (re int j=0; j<=n-1; j++){if(j>0)f[i][j]=(f[i][j]+f[i-1][j-1]+f[i-1][j])%mod;if(j<n-1)f[i][j]=(f[i][j]+f[i-1][j+1]+f[i-1][j])%mod;}for (re int i=0; i<=n-1; i++) ans1=(ans1+f[m][i])%mod;cout<<((ans-ans1)+mod)%mod;return 0; }

嗯, 就這樣,這是蒟蒻的第一篇正式題解了

轉載于:https://www.cnblogs.com/yzhx/p/10611041.html

總結

以上是生活随笔為你收集整理的AtCoder Grand Contest 013D: Piling Up 题解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。