原理就是:先把行方向上的處理完了,再處理列方向,然後刪除的行和列作乙個標記,我標記到每行沒列的第109個位置,但是**效率不知道為什麼稍微有點低,在改改說不定。還有方法就刪除一行,把整個陣列往前挪一位。
#include#includeusing namespace std;
int main()
; int n;
cin >> n;
int i, j, k;
int tm;
int sum = 0;
int current;
int n;
n = n;
while (n--)
}int m = n - 1;
while (m--)
for (j = 0; j < n; j++)
}for (j = 0; j < n; j++)
for (i = 0; i < n; i++)
}current++;
sum += a[current][current];
a[109][current] = 1;
a[current][109] = 1;
} cout << sum << endl;
memset(a,0,sizeof(a));
sum = 0;
current = 0;
} return 0;
}
這個稍微改了一下,其實就是把所有的判斷都拿了出來,直接分塊處理矩陣。另外,整個程式效率最低的部分其實是讀入部分,如果換成scanf的話,會快很多。
#include#include#includeusing namespace std;
int main()
; int n;
cin >> n;
int i, j, k;
int tm;
int sum = 0;
int current;
int n;
n = n;
while (n--)
}int m = n - 1;
while (m--)
a[0][0] -= tm;
for (j = current +1 ; j < n ; j ++)
for (i = current + 1; i < n; i++)
a[i][0] -= tm;
for (j = current + 1; j < n; j++)
}tm = 999999;
if (a[0][0] < tm)
tm = a[0][0];
for (i = current + 1 ; i < n ; i ++)
a[0][0] -= tm;
for (i = current + 1 ; i < n ; i ++)
for (j = current + 1; j < n; j++)
a[0][j] -= tm;
for (i = current + 1; i < n; i++)
}current++;
sum += a[current][current];
a[109][current] = 1;
a[current][109] = 1;
} cout << sum << endl;
memset(a, 0, sizeof(a));
sum = 0;
current = 0;
} return 0;
}
矩陣歸零消減
給定乙個n n的矩陣 3 n 100,元素的值都是非負整數 通過 n 1 次實施下述過程,可把這個矩陣轉換成乙個1 1的矩陣。每次的過程如下 首先對矩陣進行行歸零 即對每一行上的所有元素,都在其原來值的基礎上減去該行上的最小值,保證相減後的值仍然是非負整數,且這一行上至少有乙個元素的值為0。接著對矩...
矩陣歸零消減序列和
總時間限制 1000ms 記憶體限制 65536kb 描述 給定乙個n n的矩陣 3 n 100,元素的值都是非負整數 通過 n 1 次實施下述過程,可把這個矩陣轉換成乙個1 1的矩陣。每次的過程如下 首先對矩陣進行行歸零 即對每一行上的所有元素,都在其原來值的基礎上減去該行上的最小值,保證相減後的...
矩陣歸零消減序列和
描述 給定乙個n n的矩陣 3 n 100,元素的值都是非負整數 通過 n 1 次實施下述過程,可把這個矩陣轉換成乙個1 1的矩陣。每次的過程如下 首先對矩陣進行行歸零 即對每一行上的所有元素,都在其原來值的基礎上減去該行上的最小值,保證相減後的值仍然是非負整數,且這一行上至少有乙個元素的值為0。接...