Openjudge 矩陣歸零消減序列和

2021-06-26 14:34:01 字數 1779 閱讀 3686

原理就是:先把行方向上的處理完了,再處理列方向,然後刪除的行和列作乙個標記,我標記到每行沒列的第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。接...