結果
問題 | No.458 異なる素数の和 |
ユーザー |
![]() |
提出日時 | 2019-09-15 11:45:13 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 19 ms / 2,000 ms |
コード長 | 606 bytes |
コンパイル時間 | 1,373 ms |
コンパイル使用メモリ | 160,720 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-07-06 22:41:22 |
合計ジャッジ時間 | 2,608 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 28 |
ソースコード
#include "bits/stdc++.h" using namespace std; bool P[20010] = {}; vector<int> prime; int DP[20010] = {}; int main() { int N; cin >> N; for (int i = 2; i <= 20000; i++) P[i] = true; for (int i = 2; i * i <= 20000; i++) { if (P[i]) { for (int j = 2; i * j <= 20000; j++) { P[i * j] = false; } } } for (int i = 2; i <= 20000; i++) { if (P[i]) prime.push_back(i); } for (int i = 1; i <= 20000; i++) DP[i] = -1000000000; for (int X : prime) { for (int i = 20000 - X; i >= 0; i--) { DP[i + X] = max(DP[i + X], DP[i] + 1); } } if (DP[N] >= 0) cout << DP[N]; else cout << -1; }