問題描述
小 a 有乙個 n×m 的矩陣,矩陣中 1~n*m 這(n*m)個整數均出現過一次。 現在小 a 在這個矩陣內選擇乙個子矩陣,其權值等於這個子矩陣中的所有數的最 小值。小 a 想知道,如果他選擇的子矩陣的權值為 i(1<=i<=n×m),那麼他選擇 的子矩陣可能有多少種?小 a 希望知道所有可能的 i 值對應的結果,但是這些結 果太多了,他算不了,因此他向你求助。輸入格式
第一行,兩個整數 n,m。輸出格式接下來的 n 行,每行 m 個整數,表示矩陣中的元素。
n×m 行,每行乙個整數,其中第 i 行的整數表示如果小 a 選擇的子矩陣權 值為 i,他選擇的子矩陣的種類數。資料範圍
對於 30%的資料,1<=n,m<=50;注意到處理矩陣問題的基本套路,先考慮一維的情況,那麼顯然變成了單調佇列的模板題,即找到左邊第乙個小於它的數,和右邊第乙個小於它的數,然後乘一下就是矩陣數對於全部的資料,1<=n,m<=300。
那麼處理二維的情況時,列舉上下邊界,將矩陣每一列壓成乙個數,就是這一列最小的乙個數,然後仍然變成了單調佇列的模板題。複雜度o(
n2m)
**:
#include
#include
#include
#include
#define n 305
using
namespace
std;
stack
q;int n,m,map[n][n],min[n][n][n],l[n],r[n];
long
long ans[n*n];
int main()
}for(i=1;i<=m;i++)
for(j=i;j<=m;j++)
for(k=n;k>=0;k--)
q.pop();
for(k=1;k<=n;k++)ans[min[k][i][j]]+=(l[k]-k)*(k-r[k]);
}for(i=1;i<=n*m;i++)printf("%lld\n",ans[i]);
}
NKOJ 4224 矩陣計數
p4224矩陣計數 時間限制 ms空間限制 65536 kb 評測說明 1s 問題描述 給出乙個n m的方格矩陣,每個格仔裡都有乙個整數。你有兩種操作 1 x y k 將座標為x,y的格仔的數字改為k 2 x1 y1 x2 y2 k 詢問滿足值為k且座標 x,y x1 x x2 y1 y y2的格仔...
子矩陣(暴搜(全排列) DP)
一 題目 子矩陣時間限制 1 sec 記憶體限制 128 mb 提交 1 解決 1 提交 狀態 討論版 題目描述 給出如下定義 1.子矩陣 從乙個矩陣當中選取某些行和某些列交叉位置所組成的新矩陣 保持行與列的相對順序 被稱為原矩陣的乙個子矩陣。例如,下面左圖中選取第2 4行和第2 4 5列交叉位置的...
DP 壓縮矩陣 矩陣乘法 閱讀
湖南集訓 閱讀 by hta 問題描述 現在,小g 想統計共有多少權值不超過n 的不同的單詞。n 10000000 題解 很容易想到乙個dp,f i j 表示權值為i時以字母j結尾有多少鐘不同的方案。f i j f i w i k k 這演算法時間複雜度為26 26 n,對於n 10000000是無...