結果
問題 | No.2039 Copy and Avoid |
ユーザー |
|
提出日時 | 2022-08-12 22:36:42 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 101 ms / 2,000 ms |
コード長 | 1,645 bytes |
コンパイル時間 | 1,921 ms |
コンパイル使用メモリ | 136,732 KB |
最終ジャッジ日時 | 2025-01-30 21:28:35 |
ジャッジサーバーID (参考情報) |
judge3 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 31 |
ソースコード
#include "iostream"#include "climits"#include "list"#include "queue"#include "stack"#include "set"#include "functional"#include "algorithm"#include "string"#include "map"#include "unordered_map"#include "unordered_set"#include "iomanip"#include "cmath"#include "random"#include "bitset"#include "cstdio"#include "numeric"#include "cassert"#include "ctime"using namespace std;//constexpr long long int MOD = 1000000007;constexpr long long int MOD = 998244353;constexpr double EPS = 1e-8;//int N, M, K, T, H, W, L, R;long long int N, M, K, T, H, W, L, R;int main() {ios::sync_with_stdio(false);cin.tie(0);cin >> N >> M >> L >> R;vector<int>v(M);for (auto& i : v)cin >> i;vector<int>d;for (int i = 1; i * i <= N; i++) {if (N % i == 0) {d.push_back(i);d.push_back(N / i);}}sort(d.begin(), d.end());vector<vector<int>>ng(d.size(), vector<int>(d.size()));for (int i = 0; i < d.size(); i++) {for (auto j : v) {if (j % d[i] == 0) {for (int k = 0; k < d.size(); k++) {if (j <= d[k]) {ng[k][i] = true;}}}}}vector<vector<long long>>dp(d.size(), vector<long long>(d.size(), 1LL << 60));dp[0][0] = 0;for (int i = 1; i < d.size(); i++) {bool con = false;for (auto j : v)if (d[i] == j)con = true;if (con)continue;for (int j = 0; j < i; j++) {if (d[i] % d[j])continue;if (ng[i][j])continue;dp[i][j] = dp[j][j] + L * (d[i] / d[j]-1);dp[i][i] = min(dp[i][i], dp[i][j] + R);}}long long ans = 1LL << 60;for (auto i : dp.back()) {ans = min(ans, i);}if (ans == 1LL << 60)ans = -1;cout << ans << endl;}