#include <bits/stdc++.h> #define ll long long #define mp make_pair #define pb push_back #define ld long double #define ss(x) (int) x.size() #define fi first #define se second #define cat(x) cout << #x << " = " << x << endl using namespace std; const int nax = 2010; int n, k; int a[nax][nax]; int dp[nax][nax]; int main() { scanf("%d %d", &n, &k); for(int i = 1; i <= n; ++i) for(int j = 1; j <= i; ++j) scanf("%d", &a[i][j]); int MAX = 3000; for(int i = 1; i <= n; ++i) for(int j = 1; j <= i; ++j) { if(j == 1 || i == j) dp[i][j] = i; else dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j] - dp[i - 2][j - 1] + 1; if(dp[i][j] <= k) MAX = min(MAX, a[i][j]); } printf("%d", MAX); 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 38 39 40 | #include <bits/stdc++.h> #define ll long long #define mp make_pair #define pb push_back #define ld long double #define ss(x) (int) x.size() #define fi first #define se second #define cat(x) cout << #x << " = " << x << endl using namespace std; const int nax = 2010; int n, k; int a[nax][nax]; int dp[nax][nax]; int main() { scanf("%d %d", &n, &k); for(int i = 1; i <= n; ++i) for(int j = 1; j <= i; ++j) scanf("%d", &a[i][j]); int MAX = 3000; for(int i = 1; i <= n; ++i) for(int j = 1; j <= i; ++j) { if(j == 1 || i == j) dp[i][j] = i; else dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j] - dp[i - 2][j - 1] + 1; if(dp[i][j] <= k) MAX = min(MAX, a[i][j]); } printf("%d", MAX); return 0; } |