問題描述
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個數,表示給定的矩...