結果
問題 | No.2434 RAKUTAN de RAKUTAN |
ユーザー |
![]() |
提出日時 | 2023-08-11 17:57:05 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
RE
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 1,614 bytes |
コンパイル時間 | 1,832 ms |
コンパイル使用メモリ | 202,744 KB |
最終ジャッジ日時 | 2025-02-16 00:44:11 |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 12 RE * 12 |
ソースコード
#include<bits/stdc++.h>using namespace std;typedef long long ll;int main() {ll N, M, X;cin >> N >> M >> X;ll G, B;cin >> G;vector<ll> old(N+1, 0);//変換前のマス。0なら授業、1なら得単、-1なら落単vector<ll> g(G+1);for(int i = 1; i <= G; i++) {cin >> g.at(i);old.at(g.at(i)) = 1;}cin >> B;vector<ll> b(B+1);for(int i = 1; i <= B; i++) {cin >> b.at(i);old.at(b.at(i)) = -1;}vector<ll> count(N+1, 0);for(int i = 1; i <= N; i++) {if(old.at(i) == -1) {ll l = max(0LL, i-X);ll r = min(N, i+X);for(int j = l; j <= r; j++) {count.at(j)++;}}}vector<ll> nw(1, 0);//変換後のマスの情報for(int i = 1; i <= N; i++) {if(count.at(i) != 0) {nw.push_back(old.at(i));}else {ll sum = 0;sum += old.at(i);while(i + 1 <= N && count.at(i+1) == 0) {i++;sum += old.at(i);}nw.push_back(sum);}}ll N1 = nw.size() - 1;//変換後のマス目数vector<vector<ll>> dp(N1+1, vector<ll>(M+1, -100100100LL));dp.at(0).at(M) = 0;for(int i = 1; i <= N1; i++) {for(int j = 0; j <= M; j++) {if(j != M && i >= X) {dp.at(i).at(j) = max(dp.at(i).at(j), dp.at(i-X).at(j+1) + nw.at(i));}dp.at(i).at(j) = max(dp.at(i).at(j), dp.at(i-1).at(j) + nw.at(i));}}ll ans = -100100100LL;//単位の数はマイナスを取りうることに注意してください。for (int j = 0; j <= M; j++) {ans = max(ans, dp.at(N1).at(j));}cout << ans << endl;}