題目鏈結
觀察題目的性質:
1.中間列不存在第一列和第m
mm列同時不存在的顏色。
證明:假設第j
jj列具有第一列和第m
mm列都沒有的顏色。根據題目的性質,我們知道第[1,
j−1]
[1,j-1]
[1,j−1
]列的顏色種類和[j,
m][j,m]
[j,m
]列的顏色種數相同。我們知道[1,
j][1,j]
[1,j
]的顏色種類一定比[1,
j−1]
[1,j-1]
[1,j−1
]的多,而[j+
1,m]
[j+1,m]
[j+1,m
]的顏色種類一定不比[j,
m][j,m]
[j,m
]的多,由此可知不相等。
2.中間列不存在第一列或者第m
mm列不存在的顏色。
證明同上。
因此我們知道中間列的顏色一定是第一列和第m
mm列顏色的交集。列舉第一列和第m
mm列顏色的交集即可。
這裡要額外維護乙個dpdp
dp陣列,dp[
i]dp[i]
dp[i
]表示用i個顏色去染n
nn個方格的方案數,容斥原理維護即可。
複雜度o(n
2)o(n^2)
o(n2)。
#include
#include
#include
using
namespace std;
const
int n =
1e6+
100;
const
int mod =
1e9+7;
intqpow
(int x,
int n)
return res;
}int n, m, k;
int fac[n]
, rev[n]
, rff[n]
, dp[n]
;intc(
int n,
int m)
void
init()
dp[1]
=1;for
(int i =
2; i <= n; i++)}
}int
main()
}if(m ==2)
for(
int i =1;
2* i <= k; i++
) ans =
(ans +
1ll*
c(k, i)*c
(k - i, i)
% mod * dp[i]
% mod * dp[i]
)% mod;
printf
("%d\n"
, ans)
;return0;
}
1522 對稱矩陣的轉置
problem description 輸入矩陣的行數,再依次輸入矩陣的每行元素,判斷該矩陣是否為對稱矩陣,若矩陣對稱輸出 yes 不對稱輸出 no input 輸入有多組,每一組第一行輸入乙個正整數n n 20 表示矩陣的行數 若n 0,表示輸入結束 下面依次輸入n行資料。output 若矩陣對稱...
實驗四 2 對稱矩陣的壓縮儲存
1.實驗目的 1 掌握對稱矩陣的壓縮儲存方法 2 驗證對稱矩陣壓縮儲存的定址方法。2.實驗內容 1 建立乙個nxn的對稱矩陣a 2 將對稱矩陣用一維陣列sa儲存 3 在陣列sa中對矩陣a的任意元素進行定址操作。3.實驗程式 由於程式較為簡單,只需直接建立乙個工程,然後再在工程裡新建乙個源程式檔案即可...
58 對稱的二叉樹
請實現乙個函式,用來判斷一顆二叉樹是不是對稱的。注意,如果乙個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。遞迴 先判斷當前兩個節點是否相等,再判斷 節點a左子樹,節點b右子樹 和 節點a右子樹,節點b左子樹 是否相等 ublic class solution return sym proot.l...