結果
問題 | No.1872 Dictionary Order |
ユーザー | ぷら |
提出日時 | 2021-11-21 18:11:48 |
言語 | C++17(gcc12) (gcc 12.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 12 ms / 2,000 ms |
コード長 | 1,221 bytes |
コンパイル時間 | 2,215 ms |
コンパイル使用メモリ | 207,996 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-09-19 08:39:31 |
合計ジャッジ時間 | 3,169 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 35 |
ソースコード
#include <bits/stdc++.h>using namespace std;bitset<2001> dp[2001];int main() {int N,M;cin >> N >> M;vector<int>A(N),P(N),Q(N);for(int i = 0; i < N; i++) {cin >> A[i];}for(int i = 0; i < N; i++) {cin >> P[i];Q[P[i]-1] = i;}dp[N][0] = 1;for(int i = N-1; i >= 0; i--) {dp[i] = dp[i+1]|(dp[i+1] << A[i]);}if(!dp[0][M]) {cout << -1 << endl;return 0;}vector<int>ans,tmp(N);ans.push_back(-1);for(int i = 0; i < N; i++) {tmp[i] = Q[i];}int now = M;while (now != 0) {vector<int>nxt;bool flag = false;for(int i = 0; i < tmp.size(); i++) {if(ans.back() < tmp[i] && now >= A[tmp[i]]) {nxt.push_back(tmp[i]);if(dp[tmp[i]+1][now-A[tmp[i]]] && !flag) {ans.push_back(tmp[i]);now -= A[tmp[i]];flag = true;}}}tmp = nxt;}ans.erase(ans.begin());cout << ans.size() << endl;for(int i = 0; i < ans.size(); i++) {cout << ans[i]+1 << ((i+1 == ans.size())?"\n":" ");}}