基礎演算法 鴿巢原理 打表

2021-10-14 09:29:12 字數 1055 閱讀 9184

給乙個n*m的矩陣,每個小方格都可以取三種顏色。問有多少種染色方法可以使得矩陣中至少一對(x1,y1)與(x2,y2)滿足

輸入:t,代表t組樣例

每組樣例輸入n和m

輸出:染色方案數

打表 + 鴿巢原理

打表:可以手動打表(很難),也可以想辦法**進行打表

鴿巢原理:400個人一定有兩個人在同一天生日(通俗易懂哈)

官方題解:

不妨假設n < m。考慮乙個只有2行的矩陣。

由於我們只有3種顏色,只能產生9種不同的列組合。如果我們的列數超過9.

根據抽屜原理,我們必定能找到相同的兩列。也就是說,當 max(n,m) > 9的時候,所有的染色方案都可以產生滿足條件的矩陣。

對於更小的情況,我們可以暴力搜尋來算出那些不滿足題設的方案數。如果擔心實現的效率,也可以打表。

#include

using

namespace std;

typedef

long

long ll;

typedef pair<

int,

int> pii;

const

int maxn =

5e6+5;

const ll mod =

1e9+7;

//打表???

ll qpow

(ll a,ll b)

return res % mod;

}ll data[9]

[9]=

;int

main()

else

if(n >

9||m >9)

else

}return0;

}

鴿巢原理(初識)(純演算法)

一.什麼是 鴿巢原理 抽屜原理 若把n個物體放在n 1個抽屜中,至少有乙個抽屜中放了兩個物體。二.特點 只能用於解決存在性問題 三.例題 例一 在邊長為1的三角形放5個點,至少有兩個點之間的距離 1 2 解析 將乙個三角形分為4個三角形,在四個三角形中放5個點,則至少有兩個點在同乙個三角形中,這兩個...

鴿巢原理小結

最基礎的原理便是n 1的物體放到n個盒子裡,至少有乙個盒子放了兩個物體。poj 2356 有n個數,從中選出幾個數的和是n的倍數。不得不說數學是個神奇的東西,結論是任意的n個數,必然能找到連續的m個數之和是n的倍數。接下來簡單證明一下,組合數學書中,黑書都有介紹。sk表示a1 a2 ak,如果sk是...

演算法 鴿巢排序

鴿巢排序,名字很生動形象,其實就是把待排序的陣列中相同的元素扔到同乙個鴿巢。洛谷1177 排序 題目描述 將讀入的 n 個數從小到大排序後輸出。輸入格式 第 1 行為乙個正整數 n。第 2 行包含 n 個空格隔開的正整數 a i 為你需要進行排序的數,資料保證了a i 不超過10 9。輸出格式 將給...