給乙個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。輸出格式 將給...