ADV 2 矩陣翻轉

2021-08-10 23:52:23 字數 1010 閱讀 4630

問題描述

ciel有乙個n*n的矩陣,每個格仔裡都有乙個整數。

n是乙個奇數,設x = (n+1)/2。ciel每次都可以做這樣的一次操作:他從矩陣選出乙個x*x的子矩陣,並將這個子矩陣中的所有整數都乘以-1。

現在問你經過一些操作之後,矩陣中所有數的和最大可以為多少。

輸入格式

第一行為乙個正整數n。

接下來n行每行有n個整數,表示初始矩陣中的數字。每個數的絕對值不超過1000。

輸出格式

輸出乙個整數,表示操作後矩陣中所有數之和的最大值。

樣例輸入 3

-1 -1 1

-1 1 -1

1 -1 -1

樣例輸出 9

資料規模與約定

1 <= n <= 33,且n為奇數。

ps:錦囊1

使用貪心。

錦囊2令dp[i][j]表示矩陣中(i, j)位置的數是否要乘以-1。

注意dp[i][j]^dp[i][x]^dp[i][j+x] == 0,

dp[i][j]^dp[x][j]^dp[i+x][j] == 0 ;

所以只要確定了dp[x][j], dp[i][x], 就能將dp[i][j] 與 dp[i+x][j], dp[i][j+x]繫結起來了。

首先我們可以列舉dp[x][j]--可以通過列舉使用了哪些以(x, j)為左上角的矩形,那麼這樣,我們可以同時將dp[x][j+x]確定下來。

然後我們依次dp[j][x](j那麼我們就可以乙個個列舉dp[j][x]是否為1,然後運用貪心。

//-----c----------------

#includeint x[33][33],ans,n;

void fun1(int n)

ans=ans>lin?ans:lin;

}void fun(int n)

ans=ans>lin?ans:lin;

}void fun(int n)

{ int i,j,k;

for(k=0;k<(1<

畫素(矩陣)翻轉

題目描述 有一副由nxn矩陣表示的影象,這裡每個畫素用乙個int表示,請編寫乙個演算法,在不占用額外記憶體空間的情況下 即不使用快取矩陣 將影象順時針旋轉90度。給定乙個nxn的矩陣,和矩陣的階數n,請返回旋轉後的nxn矩陣,保證n小於等於500,影象元素小於等於256。測試樣例 1,2,3 4,5...

1023 矩陣翻轉

給定乙個正方形的整數矩陣,輸出將該矩陣按某一方向翻轉後的結果。輸入第一行有乙個整數n,表示一共有n組資料 n不會為負數。之後有n組資料,對於每組資料 第一行有兩個整數a和b,分別表示正方形矩陣的邊長,以及翻轉的方向。當b 0時水平翻轉,當b 1時豎直翻轉,當b 2時以主對角線為軸翻轉。b不會取其他值...

ADV 232 矩陣乗法

問題描述 有n個矩陣,大小分別為a0 a1,a1 a2,a2 a3,a n 1 a n 現要將它們依次相乘,只能使用結合率,求最少需要多少次運算。兩個大小分別為p q和q r的矩陣相乘時的運算次數計為p q r。輸入格式 輸入的第一行包含乙個整數n,表示矩陣的個數。第二行包含n 1個數,表示給定的矩...