KLIS 자꾸 오답의 이유를 모르겠습니다 제유나 제가 푼 방법입니다 #include using namespace std; double k; int n, a[500], cnt[500]; int b[500], c[500], ch[500][500]; void pre() { int cn[500] = { 0 }; for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) { ch[i][j] = 0; if (a[i] > a[j]) cn[i]++; } for (int i = 0; i < n; i++) cnt[cn[i]] = i; } int solve() { int max = 0; b[n - 1] = c[n - 1] = 1; for (int i = n - 2; i >= 0; i--) { b[i] = 1; for (int j = i + 1; j < n; j++) if (a[i] < a[j] && b[i] <= b[j]) b[i] = b[j] + 1; c[i] = 0; for (int j = i + 1; j < n; j++) if (b[i] - 1 == b[j] && a[i] < a[j]) { c[i] += c[j]; ch[i][j] = 1; } if (c[i] == 0) c[i] = 1; if (max < b[i]) max = b[i]; } return max; } void print(double count, int m, int j) { cout << a[j] << " "; if (m == 0) return; for (int i = 0; i < n; i++) { int l = cnt[i]; if (ch[j][l] == 1) { if (count + c[l] >= k) { print(count, m - 1, l); return; } count += c[l]; } } } int main() { int t; cin >> t; for (int i = 0; i < t; i++) { cin >> n >> k; for (int j = 0; j < n; j++) cin >> a[j]; pre(); int max = solve(); double count = 0; cout << max << endl; for (int j = 0; j < n; j++) { int l = cnt[j]; if (b[l] == max) { if (count + c[l] >= k) { print(count, max - 1, l); cout << endl; break; } count += c[l]; } } } } 이유를 모르겠습니다. 6년 전
0개의 댓글이 있습니다. 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
제유나
제가 푼 방법입니다
#include
using namespace std;
double k;
int n, a[500], cnt[500];
int b[500], c[500], ch[500][500];
void pre()
{
int cn[500] = { 0 };
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
{
ch[i][j] = 0;
if (a[i] > a[j]) cn[i]++;
}
}
int solve()
{
int max = 0;
b[n - 1] = c[n - 1] = 1;
for (int i = n - 2; i >= 0; i--)
{
b[i] = 1;
for (int j = i + 1; j < n; j++)
if (a[i] < a[j] && b[i] <= b[j])
b[i] = b[j] + 1;
}
void print(double count, int m, int j)
{
}
int main()
{
int t;
cin >> t;
for (int i = 0; i < t; i++)
{
cin >> n >> k;
for (int j = 0; j < n; j++)
cin >> a[j];
}
이유를 모르겠습니다.
6년 전