結果
| 問題 | No.949 飲酒プログラミングコンテスト |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2019-12-12 21:35:45 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 138 ms / 2,500 ms |
| コード長 | 1,152 bytes |
| 記録 | |
| コンパイル時間 | 853 ms |
| コンパイル使用メモリ | 79,412 KB |
| 実行使用メモリ | 63,908 KB |
| 最終ジャッジ日時 | 2024-06-25 17:14:09 |
| 合計ジャッジ時間 | 4,040 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 29 |
ソースコード
#include <iostream>
#include <vector>
#include <algorithm>
#include <cassert>
using namespace std;
int main() {
int n; cin >> n; int n1 = n+1;
vector<int> a(n1), b(n1), d(n);
for (int i = 0; i < n1; i++) cin >> a[i];
for (int i = 0; i < n1; i++) cin >> b[i];
for (int i = 0; i < n; i++) cin >> d[i];
sort(d.begin(), d.end());
vector<vector<int>> es(n1);
for (int i = 0; i < n1; i++) {
for (int j = 0; j < n1; j++) {
int p = i + j;
if (p > n) { continue; }
es[p].push_back(i * n1 + j);
}
}
vector<int> m(n1*n1, 0);
for (int p = n; p > 0; p--) {
for (int e : es[p]) {
int i = e / n1;
int j = e % n1;
int s = m[e];
int r = a[i] + b[j];
if (s < n && d[s] <= r) {
s++;
}
int u = e - 1;
if (u >= 0 && s > m[u]) {
m[u] = s;
}
int v = e - n1;
if (v >= 0 && s > m[v]) {
m[v] = s;
}
}
}
cout << m[0] << endl;
return 0;
}