#include <iostream> static short int wina[2001][2001]; static int n,k; static int min = 10000000; static int obecne_k = 0; void znajdzmin(int i, int j) { if ( (i < 1) || (i > n) || (j < 1) || (j > i) || (wina[i][j] <= 0) ) return; if ( (obecne_k < k) && ( (i == 1) || (j == 1) || (j == i) || ( (wina[i - 1][j - 1] < 0) && (wina[i - 1][j] < 0)) ) ) { if (wina[i][j] < min) min = wina[i][j]; bool lewy_dol = false, prawy_dol = false; obecne_k++; wina[i][j] *= -1; if( (j == 1) || (wina[i][j - 1] < 0) ) lewy_dol = true; if( (j == i) || (wina[i][j + 1] < 0) ) prawy_dol = true; if (lewy_dol) znajdzmin(i+1, j); else znajdzmin(i, j - 1); if (prawy_dol) znajdzmin(i+1, j + 1); else znajdzmin(i, j + 1); wina[i][j] *= -1; obecne_k--; } } int main() { std::cin>>n; std::cin>>k; for (int i = 1; i <= n; i++) for (int j = 1; j <= i; j++) std::cin>> wina[i][j]; znajdzmin(1, 1); std::cout << min; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | #include <iostream> static short int wina[2001][2001]; static int n,k; static int min = 10000000; static int obecne_k = 0; void znajdzmin(int i, int j) { if ( (i < 1) || (i > n) || (j < 1) || (j > i) || (wina[i][j] <= 0) ) return; if ( (obecne_k < k) && ( (i == 1) || (j == 1) || (j == i) || ( (wina[i - 1][j - 1] < 0) && (wina[i - 1][j] < 0)) ) ) { if (wina[i][j] < min) min = wina[i][j]; bool lewy_dol = false, prawy_dol = false; obecne_k++; wina[i][j] *= -1; if( (j == 1) || (wina[i][j - 1] < 0) ) lewy_dol = true; if( (j == i) || (wina[i][j + 1] < 0) ) prawy_dol = true; if (lewy_dol) znajdzmin(i+1, j); else znajdzmin(i, j - 1); if (prawy_dol) znajdzmin(i+1, j + 1); else znajdzmin(i, j + 1); wina[i][j] *= -1; obecne_k--; } } int main() { std::cin>>n; std::cin>>k; for (int i = 1; i <= n; i++) for (int j = 1; j <= i; j++) std::cin>> wina[i][j]; znajdzmin(1, 1); std::cout << min; } |