#include <cstdio> using I = unsigned int; static constexpr I MAXN=2000; static I cnt[MAXN*MAXN]; static I calc() { I N, K, v, ret; scanf("%u %u", &N, &K); for (I y=0; y<N; ++y) { for (I x=0; x<=y; ++x) { I c; if (y == 0) c = 1; else if (y == 1) c = 2; else if (x == 0) c = cnt[(y-1)*MAXN]+1; else if (x == y) c = cnt[(y-1)*MAXN+x-1]+1; else c = cnt[(y-1)*MAXN+x-1]+cnt[(y-1)*MAXN+x]-cnt[(y-2)*MAXN+x-1]+1; cnt[y*MAXN+x] = c; scanf("%u", &v); if (c == 1) ret = v; else if (c <= K && v < ret) ret = v; } } return ret; } int main() { printf("%d\n", calc()); return 0; }
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 | #include <cstdio> using I = unsigned int; static constexpr I MAXN=2000; static I cnt[MAXN*MAXN]; static I calc() { I N, K, v, ret; scanf("%u %u", &N, &K); for (I y=0; y<N; ++y) { for (I x=0; x<=y; ++x) { I c; if (y == 0) c = 1; else if (y == 1) c = 2; else if (x == 0) c = cnt[(y-1)*MAXN]+1; else if (x == y) c = cnt[(y-1)*MAXN+x-1]+1; else c = cnt[(y-1)*MAXN+x-1]+cnt[(y-1)*MAXN+x]-cnt[(y-2)*MAXN+x-1]+1; cnt[y*MAXN+x] = c; scanf("%u", &v); if (c == 1) ret = v; else if (c <= K && v < ret) ret = v; } } return ret; } int main() { printf("%d\n", calc()); return 0; } |