結果
| 問題 |
No.497 入れ子の箱
|
| コンテスト | |
| ユーザー |
lapi
|
| 提出日時 | 2019-08-18 13:08:24 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 5 ms / 5,000 ms |
| コード長 | 1,231 bytes |
| コンパイル時間 | 1,271 ms |
| コンパイル使用メモリ | 113,100 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-10-01 13:56:18 |
| 合計ジャッジ時間 | 2,482 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 29 |
ソースコード
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#include <list>
#include <set>
#include <map>
#include <numeric>
#include <regex>
#include <tuple>
#include <iomanip>
#include <cmath>
using namespace std;
typedef long long ll;
typedef pair<int, int> P;
#define MOD 1000000007 // 10^9 + 7
#define INF 1000000000 // 10^9
#define LLINF 1LL<<60
int X[1009][3];
P A[1009];
int dp[1009]; // dp[i] : i番目のものが一番内側にあるときの最大個数
int main() {
cin.tie(0);
ios::sync_with_stdio(false);
int N; cin >> N;
for (int i = 0; i < N; i++) {
int tmp[3];
for (int j = 0; j < 3; j++) cin >> tmp[j];
sort(tmp, tmp + 3);
for (int j = 0; j < 3; j++) X[i][j] = tmp[j];
A[i] = P(X[i][2], i);
}
sort(A, A + N, greater<P>());
//for (int i = 0; i < N; i++) cout << A[i].second << " ";
for (int i = 0; i < N; i++) {
int now = A[i].second;
int M = 1;
for (int j = 0; j < i; j++) {
int befo = A[j].second;
if (X[now][0] < X[befo][0] && X[now][1] < X[befo][1] && X[now][2] < X[befo][2]) M = max(M, dp[j] + 1);
}
dp[i] = M;
}
int ans = 0;
for (int i = 0; i < N; i++) ans = max(ans, dp[i]);
cout << ans << endl;
return 0;
}
lapi