noip 模擬賽之xcj的妹子

2021-08-28 16:48:11 字數 2238 閱讀 6086

【題目背景】

眾所周知,xcj是個萬人迷,擁有迷妹無數。眼紅的jdr(太可愛啦!!!)和wly決定建立「仇帥者聯盟」,打倒xcj以解除長期以來xcj對妹子的壟斷。於是他們制定了乙個作戰計畫...

【題目描述】

將實驗的校園看成是乙個n*m的地圖,左上角為 (1,1) ,jdr和wly從起點 (1,1) 出發(只能向下或向右走)分別走各自的最短路到達xcj的活動地點 (n,m) 進行刺殺,由於兩人均習慣於單打獨鬥,所以兩人途中不會相遇。為了保護xcj,xcj的迷妹們傾巢而出,佔據在地圖上的一些格仔中,jdr和wly不想打草驚蛇,所以在行進的過程中不會經過有迷妹把守的格仔。

已知只有當jdr和wly都到達目標地點才會刺殺成功,問題是xcj有幾種死法?(即jdr和wly均順利到達 (n,m) 的方案數)

【輸入格式】

第一行兩個整數n,m,表地圖的行數和列數。

接下來n行每行m個數,每個數為0或1,0表示 (i,j) 位置上無迷妹,1表有迷妹。

【輸出格式】

乙個正整數表方案數

題解:dp+容斥

在格仔上亂跑的問題很常見,但這種是比較難的。

首先,如果我們不考慮不能重疊和不能經過的點,那麼這個問題很簡單,有結論:

這裡重點談一談如何快速求出某一點到終點的路線數:

首先我們發現,對某一點的路線數dis[i][j],有:

dis[i][j]=dis[i+1][j]+dis[i][j+1](這一點很好理解,每乙個點有兩種移動方向)
那麼這個很像乙個楊輝三角的遞推式,所以我們可以把整個矩陣看做斜的楊輝三角處理,這樣整個矩陣就會變成(以n=4,m=3為例):

c(5,2) c(4,2) c(3,2) c(2,2)

c(4,1) c(3,1) c(2,1) c(1,1)

c(3,0) c(2,0) c(1,0) c(0,0)

那麼接下來,我們就可以探索規律了。由於我們只需要處理第一行和第一列的內容,所以我們只研究這兩段: 、 首先對第一行:我們發現,第一行所有上面的數是一樣的,應為m-1,而下面的數有乙個遞減的趨勢,我們推測要減掉i

那麼用什麼減掉i呢?經探索規律得,應用m+n-1減掉i即可!

所以第一行第i個數到終點路徑數的通項即為:c(m+n-i-1,m-1)(可以思考一下為什麼下面一定比上面大,很簡單)

同理,第一列第i個數到終點路徑的通項即為:c(m+n-i-1,m-i)(這裡推導猜想過程完全同上)

當然我們會發現,這題沒有這麼簡單

所以我們回歸最原始的dp思想:

仍然保留遞推式:

dp[i][j]=dp[i-1][j]+dp[i][j-1]

那麼對於無法到達的點,我們僅需令dp=0即可

這樣方案數就能推出來了

接下來我們考慮路徑不重疊的問題:

首先有乙個結論很顯然:

為什麼?

很簡單:如果乙個人從藍色到綠色,那另乙個人只能從綠色到藍色,這樣一定會在中間有交叉!

所以我們僅需應用乙個容斥,將綠->綠,藍->藍的方案數相乘減去綠->藍,藍->綠的方案數相乘即可

#include #include #include #include #include #include #include #include #define mode 5462617

#define ll long long

using namespace std;

ll dp1[2005][2005],dp2[2005][2005];

int used[2005][2005];

int n,m;

int main()

} if(used[1][2]||used[2][1])

dp1[1][2]=1,dp2[2][1]=1;

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

if(i==1&&j==2)

if(i==2&&j==1)

if(used[i][j])

else

}} printf("%lld\n",((dp1[n-1][m]*dp2[n][m-1]%mode-dp1[n][m-1]*dp2[n-1][m]%mode)%mode+mode)%mode);

return 0;

}

noip 模擬賽 Po姐姐與他的妹子A

a a.cpp time limit 1s memory limit 128mb 題目背景 po姐姐很愛他的妹子,可是po姐姐並沒有妹子。於是po姐姐決定去找妹子。題目描述 a國有n個城鎮,由n 1條道路連線,構成了乙個樹形結構。每條道路的長度都是一樣的。po姐姐最近得到了乙個資訊 在a國的某些城鎮...

noip模擬賽 時之終末

聖佐治 不用拘泥,剩下的時間已不多 聖佐治 直呼我的真名 絲佩碧雅 聖佐治大人 聖佐治 如今,已無法維持結界,或是抑制深淵的前進 聖佐治 既然如此,我將獻上這副身軀,期望最後的戰鬥 聖佐治 已經 應該沒有再和我多需說明的話語了 聖佐治 我也明白,我和其他4人都一樣,是沒有內在的傀儡 只不過是曾經存在...

2015 10 31的NOIP模擬賽

這是noip前的最後一周了。第一題是個組合數學的問題,規模不算太大。但第一反應就直接dp了,o n 2 的複雜度,始終想不到優化。本來看著1 3 4 6 10 15一串串數覺得多熟悉的,就是想不起來那是組合數。最後只有80分 第二題算是基本想到了吧,但是忽略了乙個問題 我的想法是每行0的個數要麼是當...