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
#include <cstdio>
using namespace std;

const int MAX_N = 2000;
int t1[MAX_N + 5],
    t2[MAX_N + 5],
    t3[MAX_N + 5];

int main()
{
    int n,k,min=2137,a;
    scanf("%d %d", &n, &k);
    int *curr, *prev, *prevprev, *tmp;
    curr = t1;
    prev = t2;
    prevprev = t3;
    for (int row = 1; row <= n; ++row) {
        for (int j = 1; j <= row; ++j) {
            scanf("%d", &a);
            curr[j] = prev[j-1] + prev[j] - prevprev[j-1] + 1;
            if (curr[j] <= k && a <= min)
                min = a;
        }
        tmp = prevprev;
        prevprev = prev;
        prev = curr;
        curr = tmp;
    }
    printf("%d\n", min);
    return 0;
}