#include <bits/stdc++.h>
using namespace std;
#define For(i, n) for (int i = 0; i < int(n); i++)
#define ForD(i, n) for (int i = int(n) - 1; i >= 0; i--)
#define SORT(x) sort(begin(x), end(x))
#define REP(i, begin, end) for (__typeof(end) i = (begin) - ((begin) > (end)); i != (end) - ((begin) > (end)); i += 1 - 2 * ((begin) > (end)))
template<typename T, typename U>
pair<T, U>& operator+=(pair<T, U> &lhs, const pair<T, U> &rhs){
lhs.first += rhs.first;
lhs.second += rhs.second;
return lhs;
}
template<typename T, typename U>
pair<T, U>& operator-=(pair<T, U> &lhs, const pair<T, U> &rhs){
lhs.first -= rhs.first;
lhs.second -= rhs.second;
return lhs;
}
template <class T> ostream &operator<<(ostream &os, const vector<T> &container) {
for (auto &u : container) os << u << " ";
return os;
}
template <class T, class U> ostream &operator<<(ostream &os, const pair<T, U> &p) {
os << p.first << " " << p.second;
return os;
}
#include <ext/pb_ds/assoc_container.hpp> // Common file
#include <ext/pb_ds/tree_policy.hpp> // Including tree_order_statistics_node_update
// #include <ext/pb_ds/detail/standard_policies.hpp>
using namespace __gnu_pbds;
using namespace std;
template<typename T>
using pb_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
#if DEBUG
#define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator<string> _it(_ss); err(_it, args); }
void err(istream_iterator<string>) {}
template<typename T, typename... Args>
void err(istream_iterator<string> it, T a, Args... args) {
cerr << *it << " = " << a << endl;
err(++it, args...);
}
#else
#define error(...) do {} while (0)
#endif
template<typename T, typename U>
pair<T, U> operator-(const pair<T, U> &l, const pair<T, U> &r) {
return {l.first - r.first, l.second - r.second};
}
template<typename T, typename U>
pair<T, U> operator+(const pair<T, U> &l, const pair<T, U> &r) {
return {l.first + r.first, l.second + r.second};
}
#define _upgrade do { ios::sync_with_stdio(0); cin.tie(0); } while (0)
typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
const int N = 2010;
int A[N][N];
int cost[N][N];
int main() {
_upgrade;
int n, k;
cin >> n >> k;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) cin >> A[i][j];
}
int res = A[1][1];
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
cost[i][j] = 1 + cost[i - 1][j - 1] + cost[i - 1][j]
- (i >= 2 ? cost[i - 2][j - 1] : 0);
if (cost[i][j] <= k) res = min(res, A[i][j]);
}
}
cout << res << "\n";
}
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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | #include <bits/stdc++.h> using namespace std; #define For(i, n) for (int i = 0; i < int(n); i++) #define ForD(i, n) for (int i = int(n) - 1; i >= 0; i--) #define SORT(x) sort(begin(x), end(x)) #define REP(i, begin, end) for (__typeof(end) i = (begin) - ((begin) > (end)); i != (end) - ((begin) > (end)); i += 1 - 2 * ((begin) > (end))) template<typename T, typename U> pair<T, U>& operator+=(pair<T, U> &lhs, const pair<T, U> &rhs){ lhs.first += rhs.first; lhs.second += rhs.second; return lhs; } template<typename T, typename U> pair<T, U>& operator-=(pair<T, U> &lhs, const pair<T, U> &rhs){ lhs.first -= rhs.first; lhs.second -= rhs.second; return lhs; } template <class T> ostream &operator<<(ostream &os, const vector<T> &container) { for (auto &u : container) os << u << " "; return os; } template <class T, class U> ostream &operator<<(ostream &os, const pair<T, U> &p) { os << p.first << " " << p.second; return os; } #include <ext/pb_ds/assoc_container.hpp> // Common file #include <ext/pb_ds/tree_policy.hpp> // Including tree_order_statistics_node_update // #include <ext/pb_ds/detail/standard_policies.hpp> using namespace __gnu_pbds; using namespace std; template<typename T> using pb_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; #if DEBUG #define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator<string> _it(_ss); err(_it, args); } void err(istream_iterator<string>) {} template<typename T, typename... Args> void err(istream_iterator<string> it, T a, Args... args) { cerr << *it << " = " << a << endl; err(++it, args...); } #else #define error(...) do {} while (0) #endif template<typename T, typename U> pair<T, U> operator-(const pair<T, U> &l, const pair<T, U> &r) { return {l.first - r.first, l.second - r.second}; } template<typename T, typename U> pair<T, U> operator+(const pair<T, U> &l, const pair<T, U> &r) { return {l.first + r.first, l.second + r.second}; } #define _upgrade do { ios::sync_with_stdio(0); cin.tie(0); } while (0) typedef long long ll; typedef long double ld; typedef pair<int, int> pii; typedef pair<ll, ll> pll; const int N = 2010; int A[N][N]; int cost[N][N]; int main() { _upgrade; int n, k; cin >> n >> k; for (int i = 1; i <= n; i++) { for (int j = 1; j <= i; j++) cin >> A[i][j]; } int res = A[1][1]; for (int i = 1; i <= n; i++) { for (int j = 1; j <= i; j++) { cost[i][j] = 1 + cost[i - 1][j - 1] + cost[i - 1][j] - (i >= 2 ? cost[i - 2][j - 1] : 0); if (cost[i][j] <= k) res = min(res, A[i][j]); } } cout << res << "\n"; } |
English